Boost logo

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:

<http://boost-log.svn.sourceforge.net/viewvc/boost-log/trunk/boost-log/boost/log/detail/unspecified_bool.hpp?revision=432&view=markup>

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