静的データメンバ定義中のラムダ式がクラススコープになる理由
C++11で静的データメンバ定義(X::singleton
)のラムダ式中から、該当クラス(X
)のprivateメソッド(X::X()
とX::init()
)にアクセスできるのはどうしてですか? C++仕様での該当パラグラフを知りたいです。
class X {
X() {}
void init() {}
public:
X(const X&) = default;
void mf() const {}
static const X& singleton;
};
const X& X::singleton = []{
static X obj; // X::X()にアクセス可能
obj.init(); // X::init()にアクセス可能
return obj;
}();
int main()
{
// X x; // X::X()アクセス不可
// x.init(); // X::init()アクセス不可
X::singleton.mf();
}
LiveDemo: http://melpon.org/wandbox/permlink/hqOvjVHyBdfV5HtE