http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53613
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-06-12 10:47:58 UTC --- I think it compiles with 4.4 because __cook::~__cook is not noexcept, because 4.4 doesn't infer an empty throw spec for a trivial destructor. If you add throw() to ~__cook you get the same errors about looser throw specifiers. So 4.4 was generating different code, but in this example it makes no practical difference because you can't use the noexcept operator in 4.4 to test whether something has an empty exception specifier anyway.