// PR c++/13944 | |
// Bug: When eliding the copy from the A temporary into the exception | |
// object, we extended the throw prohibition to the constructor for the | |
// temporary. This is wrong; the throw from A() should propagate normally | |
// regardless of the elision of the temporary. | |
// { dg-do run } | |
struct A | |
{ | |
A() { throw 0; } | |
}; | |
int main() | |
{ | |
try | |
{ | |
throw A(); | |
} | |
catch(int i) | |
{ | |
return i; | |
} | |
catch (...) | |
{ | |
return 2; | |
} | |
return 3; | |
} |