Nie wiem, jak to opisać lepiej. Oto kod. To nie kompilator na gcc 4.9.2 (Debian 8.5), ciężko myślę, że skompilowany w poprzedniej wersji. Problem wydaje się występować tylko wtedy, gdy uzyskałem dostęp do później zadeklarowanej struktury jako domyślny argument w konfiguracji lambda. Pozostałe pokazane przypadki działają.Dostęp do dwuetapowego elementu deklaracji lambda
// Test program
class C1
{
private:
// Forward-declared
struct S_Private;
S_Private* d_;
public:
void func();
};
struct C1::S_Private
{
int a;
};
void C1::func()
{
// This will work
int test = d_->a;
// Accessing the d_->a as a default argument in lambda setup
// will NOT work:
// error: invalid use of non-static data member ‘C1::d_’
auto some_lambda = [&](int arg = d_->a)
{
// This will also work
int test2 = d_->a;
};
}
int main(void)
{
}
'd_' nie jest przechwytywany. "ten" jest. – aschepler
@aschepler Dobra rozmowa. Myślę, że lepiej oddaje to, co się teraz dzieje. – NathanOliver