最新版本的GCC 4.8在头文件中提供以下代码:
auto L = [](){}; struct S { decltype(L) m; };@H_403_3@以下警告:
test.hpp:3:8: warning: 'S' has a field 'S::m' whose type uses the anonymous namespace [enabled by default] struct S ^@H_403_3@为什么编译器会考虑lambda的类型来使用匿名命名空间?我使lambda全局化,我没有在任何地方使用匿名命名空间.
更新:即使我将lambda放在显式名称空间中,compiles也会发出相同的警告,如下所示:
namespace N { auto L = [](){}; } struct S { decltype(N::L) m; };@H_403_3@更新2:事实上,甚至类范围lambda都有同样的问题:
class N { static constexpr auto L = [](){}; }; struct S { decltype(N::L) m; };@H_403_3@