File: 91_comparison_with_std.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 (48 lines) | stat: -rw-r--r-- 2,205 bytes parent folder | download | duplicates (3)
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
[/
    Boost.Optional

    Copyright (c) 2015 - 2024 Andrzej KrzemieĊ„ski

    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)
]


[section:std_comp Comparison with `std::optional`]

[table
  []
  [ [[*`boost::optional`]] [[*`std::optional`]] [] ]
  [ [`optional<int> o = none;`] [`optional<int> o = nullopt;`] [Different name for no-value tag.] ]
  [ [`optional<X> o {in_place_init, a, b};`] [`optional<int> o {in_place, a, b};`] [Different name for in-place initialization tag.] ]
  [ [] [`optional<vector<int>> o {in_place, {1, 2, 3}};`

  `o.emplace({4, 5, 6});`] [No in-place initialization with initializer-list in `boost`.] ]
  [ [`optional<X> o {in_place_init_if, cond, a, b};`] [] [No syntax for conditional in-place initialization in `std`.] ]
  [ [`optional<X> o {cond, x};`] [] [No syntax for conditional initialization from `T` in `std`.] ]
  [ [`optional<T> o {U{}};`

  `optional<T> o {optional<U>{}};`] [`optional<T> o = U{};`

  `optional<T> o = optional<U>{}`] [Constructors form `U` and `optional<U>` are explicit in `boost` and implicit in `std`.] ]
  [ [] [`optional o = 1;`] [No clever deduction of of `optional`'s template parameters in initialization in `boost`. ]]
  [ [`optional<X const&> o;`] [] [No optional references in `std`.] ]
  [ [] [`constexpr optional<int> o;`] [No `constexpr` interface in `boost`.] ]
  [ [`o.map(&f);`

  `o.flat_map(&of);` ] [`o.transform(&f);`

  `o.and_then(&of);`] [Different names and signatures for monadic interface functions. `boost` takes callbacks by value, `std` by universal reference.] ]
  [ [] [`o.or_else(&of);`] [No `or_else` function in `boost`.] ]
  [ [`o.value_or_eval(&f);`] [] [No `value_or_eval` function in `std`.] ]
  [ [] [`optional<T>{} == U{}`;

  `optional<T>{} == optional<U>{}`] [No comparisons with `U` or `optional<U>` in `boost`.] ]
  [ [`make_optional(cond, v);`] [] [No `make_optional` with condition in `std`.] ]
  [ [] [`make_optional<T>(a, b);`] [No `make_optional` with specified `T` in `boost`.] ]
  [ [`std::cout << optional<int>{};`] [] [No printing to IOStreams in `std`.]]
]


[endsect][/ std_comp]