http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33799
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- It's now 2013 so the sensible thing to do is not return by value if your destructor can throw. FWIW Clang also behaves the same as G++ and Intel, and of course calls std::terminate() in C++11 mode.