std::variant:
std::variant
suggest changeVariant is a replacement for raw union use. It is type-safe and knows what type it is, and it carefully constructs and destroys the objects within it when it should.
It is almost never empty: only in corner cases where replacing its content throws and it cannot back out safely does it end up being in an empty state.
It behaves somewhat like a std::tuple, and somewhat like an std::optional.
Using std::get and std::get_if is usually a bad idea. The right answer is usually std::visit, which lets you deal with every possibility right there. if constexpr can be used within the visit if you need to branch your behavior, rather than doing a sequence of runtime checks that duplicate what visit will do more efficiently.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents
1
Literals
8
Arrays
11
Loops
14
keywords
16
auto keyword
17
Pointers
20
std::string
21
Enumeration
22
std::atomic
23
std::vector
24
std::array
25
std::pair
26
std::map
29
std::any
30
std::variant
35
std::iomanip
36
Iterators
37
Basic I/O
38
File I/O
39
Streams
43
References
44
Polymorphism
51
Unions
52
Templates
53
Namespaces
56
Lambdas
57
Threading
59
Preprocessor
60
SFINAE
62
RAII
63
Exceptions
67
Sorting
74
Pimpl idiom
75
Copy elision
78
Singleton
81
Type erasure
84
RTTI
87
Scopes
88
Atomic types
90
constexpr
98
Type traits
102
Attributes
104
Profiling
107
Recursion
108
Callable objects
111
Inline functions
113
Header files
116
Parameter packs
117
Iteration
118
type deduction
120
Build systems
122
Type inference
125
Alignment
126
Inline variables
133
Optimization
134
Semaphore
136
Debugging
139
Mutexes
140
Recursive mutex
141
Unit testing
142
decltype
143
Digit separators
144
C++ Containers
146
Contributors