http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57645
--- Comment #6 from Daniel Krügler <daniel.kruegler at googlemail dot com> --- (In reply to Dave Peterson from comment #5) In C++11 terminate is expected for this code, because the implied exception specification of any destructor is noexcept(true), so throwing an exception here is a bad idea. You have to add noexcept(false) or you have to switch to C++03 mode to make it work.