Re: Exception classes with throwing copy-constructors
Armen Tsirunyan wrote:
#include <iostream>
//exception class, whose copy constructor throws on second and further
invocations
struct Exc
{
Exc(){}
Exc(Exc const &)
{
static int x = 0;
if(x)
throw 0;
++x;
}
};
int main()
{
try
{
throw Exc();
}
catch(Exc e)
{
std::cout << "Exc\n";
Exc e1(e);
}
catch(int)
{
std::cout << "int\n";
}
}
The questions are:
1. What should the output of this progam be, if defined
2. What whould the output of this progam be, if defined, if we were to
catch Exc by reference
3. What whould the output of this progam be, if defined, if we were to
catch Exc by reference, but Exc's copy-constructor ha\\had changed so
that it ALWAYS throws 0.
4. What whould the output of this progam be, if defined, if we were to
catch Exc by value, but Exc's copy-constructor ha\\had changed so that
it ALWAYS throws 0.
Do you want to know the behavior before or after core language defect report
#475 was accepted? :-)
Core language defect report #475, "When is std::uncaught_exception() true?
(take 2)", was voted into the Working Paper of C++0x last month:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#475
HTH, Niels
--
Niels Dekker
http://www.xs4all.nl/~nd/dekkerware
Scientific programmer at LKEB, Leiden University Medical Center