VS2010でコンパイルエラーが発生しましたが、コンパイラのバグと見なすべきかどうかわかりません。
シナリオを可能な限り単純化しました。テンプレートクラスはあるクラスのフレンドとして宣言され、ラムダ関数内でフレンドのプライベートメンバーにアクセスしようとします。コードは次のとおりです。
class Foo {
template<typename T> friend class Bar;
int priv;
};
template<typename T>
class Bar {
public:
void func() {
Foo foo;
foo.priv = 17; // compiles
auto lambda_func = [](Foo& _foo) { _foo.priv = 17; }; // doesn't compile
}
};
void test() {
Bar<int> bar;
bar.func();
}
これは、Barがテンプレートクラスである場合にのみ発生することに注意してください。