c++ - Koenig 查找的尾随返回类型和回退

标签 c++ return-type argument-dependent-lookup trailing-return-type return-type-deduction

大多数时候,简单成员函数的 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::swapstd::beginstd 时,使用带有后备的参数相关查找非常常见::结束)

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/

相关文章:

c++ - Hook MS Detours 并注入(inject) Withdll.exe 时应用程序崩溃

c# - 我应该从函数返回数组还是集合?

c++ - 模板和重载之间的交互

c++ - 参数相关名称查找 : add extra namespace to look into

c++ - 为什么要发明参数依赖查找?

c++ - 内联函数和 __thiscall __cdecl Bjarne String 示例

c++ - Visual Studio 2010 : "ConfigurationGeneral" rule is missing from the project

c++ - 访问不同类中的顶级变量和方法

java - 作为父类(super class)返回时子类数据的安全性

java - 捕获返回基类型或派生类型的方法的返回值