Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for a snapshot of the develop branch, built from commit 549cd0dc90.
PrevUpHomeNext

explicit_operator_bool

Overview
Examples
History

Authors

  • Andrey Semashev

Header <boost/core/explicit_operator_bool.hpp> provides BOOST_EXPLICIT_OPERATOR_BOOL(), BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT() and BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL() compatibility helper macros that expand to an explicit conversion operator to bool. For compilers not supporting explicit conversion operators introduced in C++11 the macros expand to a conversion operator that implements the safe bool idiom. In case if the compiler is not able to handle safe bool idiom well the macros expand to a regular conversion operator to bool.

Both macros are intended to be placed within a user's class definition. The generated conversion operators will be implemented in terms of operator!() that should be defined by user in this class. In case of BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL() the generated conversion operator will be declared constexpr which requires the corresponding operator!() to also be constexpr.

template< typename T >
class my_ptr
{
    T* m_p;

public:
    BOOST_EXPLICIT_OPERATOR_BOOL()

    bool operator!() const
    {
        return !m_p;
    }
};

Now my_ptr can be used in conditional expressions, similarly to a regular pointer:

my_ptr< int > p;
if (p)
    std::cout << "true" << std::endl;
boost 1.56
  • Added new macros BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT and BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL to define noexcept and constexpr operators.
  • The header moved to Boost.Core.
boost 1.55
  • The macro was extracted from Boost.Log.

PrevUpHomeNext