http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58859
Bug ID: 58859
Summary: throwing exceptions in destructors causes
std::terminate called too early.
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: meng at g dot clemson.edu
the following program does not execute (2) for g++-4.8.[01] -std=c++11 and I
think this is a bug. I tested the program on g++-4.[67].[01] with or without
c++11 enabled, and g++-4.8.0 with c++11 flag, and in VS 2010, in all these
cases, (2) was executed and the program finished without a call to
std::terminate. My understanding is that the throw expression happens before
stack unwinding and that there is a matching handler, therefore, std::terminate
should not be called.
----------------------- BEGIN -----------------------
#include <iostream>
struct test_t
{
test_t () { std::cout << " test_t @ " << this << std::endl; }
~test_t () { std::cout << "~test_t @ " << this << std::endl; throw 0; }
};
int main ()
{
try
{
test_t const t; // (1)
}
catch (...)
{
std::cout << __LINE__ << std::endl; // (2)
}
}
----------------------- END -----------------------