]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/core/doc/explicit_operator_bool.qbk
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / core / doc / explicit_operator_bool.qbk
CommitLineData
7c673cae
FG
1[/
2 / Copyright (c) 2013 Andrey Semashev
3 /
4 / Distributed under the Boost Software License, Version 1.0. (See accompanying
5 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 /]
7
8[section:explicit_operator_bool explicit_operator_bool]
9
10[/=================]
11[simplesect Authors]
12[/=================]
13
14* Andrey Semashev
15
16[endsimplesect]
17
18[/===============]
19[section Overview]
20[/===============]
21
22Header `<boost/core/explicit_operator_bool.hpp>` provides
23`BOOST_EXPLICIT_OPERATOR_BOOL()`, `BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()`
24and `BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()` compatibility helper macros
25that expand to an explicit conversion operator to `bool`. For compilers not
26supporting explicit conversion operators introduced in C++11 the macros expand
27to a conversion operator that implements the
28[@http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool safe bool idiom].
29In case if the compiler is not able to handle safe bool idiom well the macros
30expand to a regular conversion operator to `bool`.
31
32[endsect]
33
34[/===============]
35[section Examples]
36[/===============]
37
38Both macros are intended to be placed within a user's class definition. The
39generated conversion operators will be implemented in terms of `operator!()`
40that should be defined by user in this class. In case of
41`BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()` the generated conversion operator
42will be declared `constexpr` which requires the corresponding `operator!()`
43to also be `constexpr`.
44
45``
46template< typename T >
47class my_ptr
48{
49 T* m_p;
50
51public:
52 BOOST_EXPLICIT_OPERATOR_BOOL()
53
54 bool operator!() const
55 {
56 return !m_p;
57 }
58};
59``
60
61Now `my_ptr` can be used in conditional expressions, similarly to a regular pointer:
62
63``
64my_ptr< int > p;
65if (p)
66 std::cout << "true" << std::endl;
67``
68
69[endsect]
70
71[/==============]
72[section History]
73[/==============]
74
75[heading boost 1.56]
76
77* Added new macros `BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT` and `BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL` to define `noexcept` and `constexpr` operators.
78* The header moved to Boost.Core.
79
80[heading boost 1.55]
81
82* The macro was extracted from Boost.Log.
83
84[endsect]
85
86[endsect]