5
それをよりよく記述する方法がわからない。ここにコードがあります。これはgcc 4.9.2(Debian 8.5)のコンパイルに失敗します。以前のバージョンでコンパイルされたと思います。この問題は、ラムダ設定のデフォルト引数として後で宣言された構造体のメンバにアクセスする場合にのみ発生するようです。他のケースでも動作します。ラムダ設定の2ステップで宣言されたメンバーにアクセスする
// 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_」はキャプチャされません。 「これは」。 – aschepler
@ascheplerよろしくお願いします。私はこれが今起こっていることをより良く捕捉すると思う。 – NathanOliver