[&]
関数内にラムダがあり、ラムダ内でローカル静的変数をキャプチャして使用しています。そもそもこれが有効かどうかはわかりませんが、これは正常にコンパイルおよびリンクされます。
void Foo()
{
static int i = 5;
auto bar = [&]()
{
i++;
};
bar();
}
int main()
{
Foo();
}
しかしFoo
、テンプレート化された関数を作成することによって:
template <typename T>
void Foo()
{
static int i = 5;
auto bar = [&]()
{
i++;
};
bar();
}
int main()
{
Foo<int>();
}
次のエラーが発生します。
g ++-4.7 -std = c ++ 11 main.cpp
/tmp/cctjnzIT.o:関数内'void Foo():: {lambda()#1} :: operator()()const':
main.cpp: (.text + 0x1a):「i」への未定義の参照
main.cpp:(。text + 0x23):「i」への未定義の参照
collect2:エラー:ldが1つの終了ステータスを返しました
だから、私は2つの質問があります:
- 最初の例で使用
i
しているのは有効なC++でもありますか? - #1の場合、2番目の例の何が問題になっていますか?それともこれはgccのバグですか?