------- Comment #5 from jwakely dot gcc at gmail dot com 2009-06-03 09:30
-------
(In reply to comment #1)
> I'm under the impression we should simply not provide operator __safe_bool()
Agreed, there is no requirement for conversion to bool, explicit or implicit.
Even if it can be done unambiguously, adding that non-standard conversion would
encourage non-portable code. I think operator! should be removed for the same
reason.
I also noticed the move-assignment operator adds no value:
#ifdef __GXX_EXPERIMENTAL_CXX0X__
exception_ptr&
operator=(exception_ptr&& __o) throw()
{
exception_ptr(__o).swap(*this);
return *this;
}
#endif
That should be
exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
because otherwise the temporary is copy-constructed, not move-constructed, and
therefore the effect is identical to the lvalue assignment operator,
incrementing and decrementing the refcount.
(static_cast to rvalue-reference must be used, because std::move() is not
available in libsupc++)
I'll fix that separately, as part of a forthcoming patch implementing n2844.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40296