std::variant
variant is a value type that's used to represent a choice of types. The class takes a list of types, and the variant will be able to contain one value of any of those types.
It is often referred to as tagged union, because similar to a union, it can store multiple types, with only one present at a time. It also keeps track of which type is currently stored.
During the execution of a program, variant will contain exactly one of the possible types at a time.
Like optional, variant is a value type: when we create a copy of variant, the element that is currently stored is copied into the new variant.
To interact with std::variant, the C++ standard library gives us two main functions:
holds_alternative<Type>(variant): It returns true if the variant is currently holding the provided type, if not then false.
get(variant): There are two versions: get<Type>(variant) and get<Index>(variant).
get<Type>(variant) gets the value of the type that's currently stored inside...