|
Boost : |
Subject: Re: [boost] BOOST_EXPLICIT_OPERATOR_BOOL macro?
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2010-04-22 10:23:55
On 04/21/2010 07:16 PM, Christian Holmquist wrote:
> Hi,
>
> IIUC, c+0x allows the safe bool idiom to be implemented as
>
> explicit operator bool() const { ...}
>
> but in c+03 emulating that behaviour is a bit messy.
>
> There appears to be a solution for c+03 in
> boost/smart_ptr/detail/operator_bool.hpp, but it's targeted for the
> smart_ptr classes only.
>
> Would it be possible to extract operator_bool.hpp into a reusable macro,
> something like:
>
> #include<boost/utility/operator_bool.hpp>
> struct some
> {
> BOOST_EXPLICIT_OPERATOR_BOOL( m_value != 0; )
>
> int m_value;
> };
>
> What do you think?
I think such a tool would be useful. But I found it more convenient to
express explicit operator bool through operator!. This allows the check
to be arbitrarily complex, and the approach adds to compatibility with
some compilers. See here:
Usage example:
struct some
{
BOOST_LOG_OPERATOR_UNSPECIFIED_BOOL()
bool operator! () const { return m_value == 0; }
int m_value;
};
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk