+
+
+
+BOOST_EXPLICIT_OPERATOR_BOOL and BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL
+
+
Copyright © 2013 Andrey Semashev
+
+
+
+
+
+
+
+
+ BOOST_EXPLICIT_OPERATOR_BOOL()
and BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()
are 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;
+
+
+
+
+
+
-
+ The macro was extracted from Boost.Log.
+
+
+
+