GCC 4.8 の最近のビルドでは、ヘッダー ファイルに次のコードが表示されます。
auto L = [](){};
struct S
{
decltype(L) m;
};
次の警告:
test.hpp:3:8: warning: 'S' has a field 'S::m' whose type uses the anonymous namespace [enabled by default]
struct S
^
コンパイラが匿名名前空間を使用するラムダの型を考慮するのはなぜですか? ラムダをグローバルにしました。匿名の名前空間はどこにも使用しませんでした。
UPDATE :次のように、ラムダを明示的な名前空間に配置しても、コンパイルは同じ警告を出します:
namespace N
{
auto L = [](){};
}
struct S
{
decltype(N::L) m;
};
UPDATE 2 : 実際、クラススコープのラムダにも同じ問題があるようです:
class N
{
static constexpr auto L = [](){};
};
struct S
{
decltype(N::L) m;
};