大多数时候,简单成员函数的 C++17 推断返回类型可以轻松转换为 C++11 尾随返回类型。
例如中的成员函数
template<typename T>
struct X
{
T a;
auto f() { return frob(a); }
};
变成了
auto f() -> decltype(frob(a)) { return frob(a); }
考虑到在类主体的顶级范围内不允许使用命名空间,您如何为以下内容编写尾随返回类型?
namespace widget
{
template<typename S>
int froz(S&&);
}
template<typename T>
struct Y
{
T b;
auto g() { using namespace widget; return froz(b); }
};
(例如,在调用 std::swap
、std::begin
、std 时,使用带有后备的参数相关查找非常常见::结束
)
template<typename T>
struct Z
{
T container;
auto h() { using namespace std; return begin(container); }
};
最佳答案
怎么样:
template<typename T>
struct Z
{
T container;
auto h() -> decltype(
[]
{
Z<T>* z;
using namespace std; return begin(z->container);
}()
) { using namespace std; return begin(container); }
};
关于c++ - Koenig 查找的尾随返回类型和回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64809462/