似乎是GCC的bug,但是这个bug好像2012年就有了,到现在也没有fix……
#include <cstdio>
class A{
protected:
void Somefunc(){
printf("Hello world!");
}
};
class B{
public:
template<class F>
void D(F func){
func();
}
};
class E : public A{
public:
void Myfunc(){
A::Somefunc(); // works
B C;
C.D([&](){
A::Somefunc(); // not works
});
}
};
int main(){
E F;
F.Myfunc();
}
Bug 58972 – Lambda can't access private members
我猜他们已经放弃治疗了……
Bug 58972
的问题在gcc 4.8.2
上测试,编译已经不出错了。this->Somefunc()
。但是如果被E重载后,需要调用就麻烦了。我尝试了以下方式来获取。
和
和
都被编译器拒绝了,包括clang++和g++。