"g++ -std=c++11" rejects the following program: int main() { bool /*const*/ condition = false; [&]{ try{} catch(...){ if(condition){} } }(); } If the condition variable is const, the compilation successes. Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/home/user/gcc-trunk/libexec/gcc/x86_64-unknown-linux-gnu/4.8.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../gcc/configure --prefix=/home/user/gcc-trunk --disable-bootstrap --disable-multilib --enable-languages=c,c++,fortran --with-gmp=/home/user/gcc-trunk/src/build/backends --with-mpfr=/home/user/gcc-trunk/src/build/backends --with-mpc=/home/user/gcc-trunk/src/build/backends Thread model: posix gcc version 4.8.0 20130219 (experimental) (GCC)
The problem also exists for 4.7.2, so no regression. The diagnostics is interesting: "7:9: error: '...' handler must be the last handler for its try block [-fpermissive] catch(...){ ^"
It's a regression from 4.6.
Fixed for 4.7.4/4.8.1/4.9.0.
*** Bug 57143 has been marked as a duplicate of this bug. ***
*** Bug 57995 has been marked as a duplicate of this bug. ***