
From: Rene Rivera <grafik.list@redshift-software.com>
Gennaro Prota wrote:
On Sat, 27 Mar 2004 19:23:50 -0500, David Abrahams <dave@boost-consulting.com> wrote:
"Klaus Nowikow" <nowikow@decomsys.com> writes:
Reece Dunn wrote: [snip]
class errorcheck { [snip] public: inline errorcheck( int ec ): error( ec ) { if( ec < 0 ) throw( *this ); }
Careful. Throwing an exception from a constructor means that the object won't be constructed (i. e., does not exist). So you are throwing a non-existing object here.
Or am I wrong?
You're wrong. *this is copied before it is thrown. Still, the idiom above seems a bit suspicious, unless you somehow prevent derivation from errorcheck.
I can't believe you are justifying the above. You copy an object that doesn't exist yet! (The class is not a POD and has a non trivial constructor - and even if this wasn't the case...)
I don't see how the object is not fully initialized inside its constructor?? Could you explain your objection?
Until the ctor finishes -- after the closing } -- there is no object (see 3.8/1). -- Rob Stewart stewart@sig.com Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;