File: 27_ref_optional_synopsis.qbk

package info (click to toggle)
boost1.88 1.88.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 576,932 kB
  • sloc: cpp: 4,149,234; xml: 136,789; ansic: 35,092; python: 33,910; asm: 5,698; sh: 4,604; ada: 1,681; makefile: 1,633; pascal: 1,139; perl: 1,124; sql: 640; yacc: 478; ruby: 271; java: 77; lisp: 24; csh: 6
file content (303 lines) | stat: -rw-r--r-- 15,188 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
[/
    Boost.Optional

    Copyright (c) 2003-2007 Fernando Luis Cacciola Carballal

    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
]


[#ref_header_optional_optional_hpp] [section:header_optional_optional Synopsis]

    ```// In Header: <`[@boost:/boost/optional/optional.hpp boost/optional/optional.hpp]'''<phrase role="comment">&gt;</phrase>'''``

    namespace boost {

    class in_place_init_t { /* see below */ } ; ``[link reference_in_place_init __GO_TO__]``
    inline constexpr in_place_init_t in_place_init ( /* see below */ ) ;

    class in_place_init_if_t { /*see below*/ } ; ``[link reference_in_place_init_if __GO_TO__]``
    inline constexpr in_place_init_if_t in_place_init_if ( /*see below*/ ) ;

    template <class T>
    class optional ; ``[link reference_operator_template __GO_TO__]``

    template <class T>
    class optional<T&> ; ``[link reference_operator_template_spec __GO_TO__]``

    template<class T> inline bool operator == ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_equal_optional_optional __GO_TO__]``

    template<class T> inline bool operator != ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_not_equal_optional_optional __GO_TO__]``

    template<class T> inline bool operator <  ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_less_optional_optional __GO_TO__]``

    template<class T> inline bool operator >  ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_greater_optional_optional __GO_TO__]``

    template<class T> inline bool operator <= ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_less_or_equal_optional_optional __GO_TO__]``

    template<class T> inline bool operator >= ( optional<T> const& x, optional<T> const& y ) ; ``[link reference_operator_compare_greater_or_equal_optional_optional __GO_TO__]``

    template<class T> inline bool operator == ( optional<T> const& x, none_t ) noexcept ; ``[link reference_operator_compare_equal_optional_none __GO_TO__]``

    template<class T> inline bool operator != ( optional<T> const& x, none_t ) noexcept ; ``[link reference_operator_compare_not_equal_optional_none __GO_TO__]``

    template<class T> inline optional<T> make_optional ( T const& v ) ; ``[link reference_make_optional_value __GO_TO__]``

    template<class T> inline optional<std::decay_t<T>> make_optional ( T && v ) ; ``[link reference_make_optional_rvalue __GO_TO__]``

    template<class T> inline optional<T> make_optional ( bool condition, T const& v ) ; ``[link reference_make_optional_bool_value __GO_TO__]``

    template<class T> inline optional<std::decay_t<T>> make_optional ( bool condition, T && v ) ; ``[link reference_make_optional_bool_rvalue __GO_TO__]``

    template<class T> inline auto get_optional_value_or ( optional<T> const& opt, typename optional<T>::reference_const_type def ) -> typename optional<T>::reference_const_type; ``[link reference_free_get_value_or __GO_TO__]``

    template<class T> inline auto get_optional_value_or ( optional<T> const& opt, typename optional<T>::reference_type def ) -> typename optional<T>::reference_type ; ``[link reference_free_get_value_or __GO_TO__]``

    template<class T> inline T const& get ( optional<T> const& opt ) ; ``[link reference_optional_get __GO_TO__]``

    template<class T> inline T& get ( optional<T> & opt ) ; ``[link reference_optional_get __GO_TO__]``

    template<class T> inline T const* get ( optional<T> const* opt ) ; ``[link reference_optional_get __GO_TO__]``

    template<class T> inline T* get ( optional<T>* opt ) ; ``[link reference_optional_get __GO_TO__]``

    template<class T> inline auto get_pointer ( optional<T> const& opt ) -> ``['see below]``; ``[link reference_free_get_pointer __GO_TO__]``

    template<class T> inline auto get_pointer ( optional<T> & opt ) -> ``['see below]``; ``[link reference_free_get_pointer __GO_TO__]``

    template<class T> inline void swap( optional<T>& x, optional<T>& y ) ; ``[link reference_swap_optional_optional __GO_TO__]``

    template<class T> inline void swap( optional<T&>& x, optional<T&>& y ) ; ``[link reference_swap_optional_reference __GO_TO__]``

    } // namespace boost

    namespace std {

    template <typename T>
    struct hash<boost::optional<T> > ; ``[link reference_std_hash_spec __GO_TO__]``

    template <typename T>
    struct hash<boost::optional<T&> > ; ``[link reference_std_hash_spec __GO_TO__]``

    } // namespace std


[endsect]


[section:header_optional_in_place_init Initialization tags]

[#reference_in_place_init]
[#reference_in_place_init_if]

    namespace boost {

    class in_place_init_t { /* see below */ } ;
    const in_place_init_t in_place_init ( /* see below */ ) ;

    class in_place_init_if_t { /*see below*/ } ;
    const in_place_init_if_t in_place_init_if ( /*see below*/ ) ;

    }

Classes `in_place_init_t` and `in_place_init_if_t` are empty classes. Their purpose is to control overload resolution in the initialization of optional objects.
They are empty, trivially copyable classes with disabled default constructor.

[endsect]

[section:header_optional_optional_values Optional Values]

[#reference_operator_template]

    template <class T>
    class optional
    {
    public :

        typedef T         value_type ;
        typedef T &       reference_type ;
        typedef T const&  reference_const_type ;
        typedef T &&      rval_reference_type ;
        typedef T *       pointer_type ;
        typedef T const*  pointer_const_type ;

        optional () noexcept ; ``[link reference_optional_constructor __GO_TO__]``

        optional ( none_t ) noexcept ; ``[link reference_optional_constructor_none_t __GO_TO__]``

        optional ( T const& v ) ; ``[link reference_optional_constructor_value __GO_TO__]``

        optional ( T&& v ) ; ``[link reference_optional_constructor_move_value __GO_TO__]``

        optional ( bool condition, T const& v ) ; ``[link reference_optional_constructor_bool_value __GO_TO__]``

        optional ( optional const& rhs ) ; ``[link reference_optional_constructor_optional __GO_TO__]``

        optional ( optional&& rhs ) noexcept(``['see below]``) ; ``[link reference_optional_move_constructor_optional __GO_TO__]``

        template<class U> explicit optional ( optional<U> const& rhs ) ; ``[link reference_optional_constructor_other_optional __GO_TO__]``

        template<class U> explicit optional ( optional<U>&& rhs ) ; ``[link reference_optional_move_constructor_other_optional __GO_TO__]``

        template<class... Args> explicit optional ( in_place_init_t, Args&&... args ) ; ``[link reference_optional_in_place_init __GO_TO__]``

        template<class... Args> explicit optional ( in_place_init_if_t, bool condition, Args&&... args ) ; ``[link reference_optional_in_place_init_if __GO_TO__]``

        template<class InPlaceFactory> explicit optional ( InPlaceFactory const& f ) ; ``[link reference_optional_constructor_factory __GO_TO__]``

        template<class TypedInPlaceFactory> explicit optional ( TypedInPlaceFactory const& f ) ; ``[link reference_optional_constructor_factory __GO_TO__]``

        optional& operator = ( none_t ) noexcept ; ``[link reference_optional_operator_equal_none_t __GO_TO__]``

        optional& operator = ( T const& v ) ; ``[link reference_optional_operator_equal_value __GO_TO__]``

        optional& operator = ( T&& v ) ; ``[link reference_optional_operator_move_equal_value __GO_TO__]``

        optional& operator = ( optional const& rhs ) ; ``[link reference_optional_operator_equal_optional __GO_TO__]``

        optional& operator = ( optional&& rhs ) noexcept(``['see below]``) ; ``[link reference_optional_operator_move_equal_optional __GO_TO__]``

        template<class U> optional& operator = ( optional<U> const& rhs ) ; ``[link reference_optional_operator_equal_other_optional __GO_TO__]``

        template<class U> optional& operator = ( optional<U>&& rhs ) ; ``[link reference_optional_operator_move_equal_other_optional __GO_TO__]``

        template<class... Args> void emplace ( Args&&... args ) ; ``[link reference_optional_emplace __GO_TO__]``

        template<class InPlaceFactory> optional& operator = ( InPlaceFactory const& f ) ; ``[link reference_optional_operator_equal_factory __GO_TO__]``

        template<class TypedInPlaceFactory> optional& operator = ( TypedInPlaceFactory const& f ) ; ``[link reference_optional_operator_equal_factory __GO_TO__]``

        T const& get() const ; ``[link reference_optional_get __GO_TO__]``
        T&       get() ; ``[link reference_optional_get __GO_TO__]``

        T const* operator ->() const ; ``[link reference_optional_operator_arrow __GO_TO__]``
        T*       operator ->() ; ``[link reference_optional_operator_arrow __GO_TO__]``

        T const& operator *() const& ; ``[link reference_optional_operator_asterisk __GO_TO__]``
        T&       operator *() & ; ``[link reference_optional_operator_asterisk __GO_TO__]``
        T&&      operator *() && ; ``[link reference_optional_operator_asterisk_move __GO_TO__]``

        T const& value() const& ; ``[link reference_optional_value __GO_TO__]``
        T&       value() & ; ``[link reference_optional_value __GO_TO__]``
        T&&      value() && ; ``[link reference_optional_value_move __GO_TO__]``

        template<class U> T value_or( U && v ) const& ; ``[link reference_optional_value_or __GO_TO__]``
        template<class U> T value_or( U && v ) && ; ``[link reference_optional_value_or_move __GO_TO__]``

        template<class F> T value_or_eval( F f ) const& ; ``[link reference_optional_value_or_call __GO_TO__]``
        template<class F> T value_or_eval( F f ) && ; ``[link reference_optional_value_or_call_move __GO_TO__]``

        template<class F> auto map( F f ) const& -> ``['see below]``; ``[link reference_optional_map __GO_TO__]``
        template<class F> auto map( F f ) & -> ``['see below]``; ``[link reference_optional_map __GO_TO__]``
        template<class F> auto map( F f ) && -> ``['see below]``; ``[link reference_optional_map_move __GO_TO__]``

        template<class F> auto flat_map( F f ) const& -> ``['see below]``; ``[link reference_optional_flat_map __GO_TO__]``
        template<class F> auto flat_map( F f ) & -> ``['see below]``; ``[link reference_optional_flat_map __GO_TO__]``
        template<class F> auto flat_map( F f ) && -> ``['see below]``; ``[link reference_optional_flat_map_move __GO_TO__]``

        T const* get_ptr() const ; ``[link reference_optional_get_ptr __GO_TO__]``
        T*       get_ptr() ; ``[link reference_optional_get_ptr __GO_TO__]``

        bool has_value() const noexcept ; ``[link reference_optional_operator_bool __GO_TO__]``

        explicit operator bool() const noexcept ; ``[link reference_optional_operator_bool __GO_TO__]``

        bool operator!() const noexcept ; ``[link reference_optional_operator_not __GO_TO__]``

        void reset() noexcept ; ``[link reference_optional_reset __GO_TO__]``

        // deprecated methods

        // (deprecated)
        void reset ( T const& ) ; ``[link reference_optional_reset_value __GO_TO__]``

        // (deprecated)
        bool is_initialized() const ; ``[link reference_optional_is_initialized __GO_TO__]``

        // (deprecated)
        T const& get_value_or( T const& default ) const ; ``[link reference_optional_get_value_or_value __GO_TO__]``
    };


[endsect]


[section:header_optional_optional_refs Optional References]

[#reference_operator_template_spec]
    template <class T>
    class optional<T&> // specialization for lvalue references
    {
    public :

        typedef T& value_type;
        typedef T& reference_type;
        typedef T& reference_const_type; // no const propagation
        typedef T& rval_reference_type;
        typedef T* pointer_type;
        typedef T* pointer_const_type;   // no const propagation

        optional () noexcept ; ``[link reference_optional_ref_default_ctor __GO_TO__]``

        optional ( none_t ) noexcept ; ``[link reference_optional_ref_default_ctor __GO_TO__]``

        template<class R> optional(R&& r) noexcept ;  ``[link reference_optional_ref_value_ctor __GO_TO__]``

        template <class R> optional(bool cond, R&& r) noexcept ; ``[link reference_optional_ref_cond_value_ctor __GO_TO__]``

        optional ( optional const& rhs ) noexcept ; ``[link reference_optional_ref_copy_ctor __GO_TO__]``

        template<class U> explicit optional ( optional<U&> const& rhs ) noexcept ; ``[link reference_optional_ref_ctor_from_opt_U __GO_TO__]``

        optional& operator = ( none_t ) noexcept ; ``[link reference_optional_ref_assign_none_t __GO_TO__]``

        optional& operator = ( optional const& rhs ) noexcept; ``[link reference_optional_ref_copy_assign __GO_TO__]``

        template<class U> optional& operator = ( optional<U&> const& rhs ) noexcept ; ``[link reference_optional_ref_assign_optional_U __GO_TO__]``

        template<class R> optional& operator = (R&& r) noexcept ; ``[link reference_optional_ref_assign_R __GO_TO__]``

        template<class R> void emplace ( R&& r ) noexcept ; ``[link reference_optional_ref_emplace_R __GO_TO__]``

        T& get() const ; ``[link reference_optional_ref_get __GO_TO__]``
        T& operator *() const ; ``[link reference_optional_ref_get __GO_TO__]``

        T* operator ->() const ; ``[link reference_optional_ref_arrow __GO_TO__]``

        T& value() const& ; ``[link reference_optional_ref_value __GO_TO__]``

        template<class R> T& value_or( R && r ) const noexcept ; ``[link reference_optional_ref_value_or __GO_TO__]``

        template<class F> T& value_or_eval( F f ) const ; ``[link reference_optional_ref_value_or_eval __GO_TO__]``

        template<class F> auto map( F f ) const -> ``['see below]``; ``[link reference_optional_ref_map __GO_TO__]``

        template<class F> auto flat_map( F f ) const -> ``['see below]``; ``[link reference_optional_ref_flat_map __GO_TO__]``

        T* get_ptr() const noexcept ; ``[link reference_optional_ref_get_ptr __GO_TO__]``

        bool has_value() const noexcept ; ``[link reference_optional_ref_operator_bool __GO_TO__]``

        explicit operator bool() const noexcept ; ``[link reference_optional_ref_operator_bool __GO_TO__]``

        bool operator!() const noexcept ; ``[link reference_optional_ref_operator_not __GO_TO__]``

        void reset() noexcept ; ``[link reference_optional_ref_reset __GO_TO__]``

        // deprecated methods

        // (deprecated)
        template<class R> void reset ( R && r ) noexcept ; ``[link reference_optional_ref_reset_value __GO_TO__]``

        // (deprecated)
        bool is_initialized() const noexcept ; ``[link reference_optional_ref_is_initialized __GO_TO__]``

        // (deprecated)
        template<class R> T& get_value_or( R && r ) constnoexcept; ``[link reference_optional_ref_get_value_or_value __GO_TO__]``

    private:
        T* ref; // exposition only
    };
[endsect]