小编raf*_*alc的帖子

通用lambda不能在命名空间中使用?

考虑以下代码

#include <iostream>
#include <functional>

namespace A {
    template<typename T>
    struct X {
        using Function = std::function<int(T)>;
        static Function f;
    };

    template<typename T>
    typename X<T>::Function X<T>::f = [](auto) { return 42; };

}

int main() {
    std::cout << A::X<int>::f(0);
}
Run Code Online (Sandbox Code Playgroud)

GCC和clang都接受此代码,但MSVC(测试版本19.00.23506)给出:

error C2888: 'auto <lambda_ce48e25aa4b9e3d225584044e4eae9e2>::operator ()(_T1) const': symbol cannot be defined within namespace 'A'

实际上,如果我删除命名空间A并在全局命名空间中定义所有内容,则接受代码.如果我使lambda表达式非泛型,则相同.

有人可以解释一下MSVC在这段代码中看到的问题是什么吗?C++ Standard是否限制在上面的上下文中使用泛型lambda?

c++ namespaces generic-lambda c++14

6
推荐指数
1
解决办法
421
查看次数

标签 统计

c++ ×1

c++14 ×1

generic-lambda ×1

namespaces ×1