次のコードを検討してください。
auto lambda=[] () { std::cout << "Error occurred!" << std::endl; };
auto lambda_2=[=/*,lambda*/] () {
try {
// Do something
std::cout << (2+2) << std::endl;
} catch (...) {
lambda();
throw;
}
};
私の期待: このコードはコンパイルされます。
現実 (MinGW 4.8.0):
main.cpp: In lambda function:
main.cpp:27:5: error: '...' handler must be the last handler for its try block [
-fpermissive]
} catch (...) {
^
の明示的なコピーによるキャプチャのコメントを外すとlambda
、コードはコンパイルされますが、警告が表示されます。
main.cpp:20:19: warning: explicit by-copy capture of 'lambda' redundant with by-
copy capture default [enabled by default]
auto lambda_2=[=,lambda] () {
^
これは GCC の問題ですか、それとも理解できないラムダ キャプチャの側面がありますか?
編集:以下がコンパイルされます:
auto lambda=[] () { std::cout << "Error occurred!" << std::endl; };
auto lambda_2=[&] () {
try {
// Do something
std::cout << (2+2) << std::endl;
} catch (...) {
try {
lambda();
} catch (...) { }
throw;
}
};