The following code example is taken from the book
C++ Templates - The Complete Guide, 2nd Edition
by David Vandevoorde, Nicolai M. Josuttis, and Douglas Gregor,
Addison-Wesley, 2017
© Copyright David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor 2017
#include "variant-all.hpp"
#include <iostream>
template<typename V, typename Head, typename... Tail>
void printImpl(V const& v)
{
if (v.template is<Head>()) {
std::cout << v.template get<Head>();
}
else if constexpr (sizeof...(Tail) > 0) {
printImpl<V, Tail...>(v);
}
}
template<typename... Types>
void print(Variant<Types...> const& v)
{
printImpl<Variant<Types...>, Types...>(v);
}
int main() {
Variant<int, short, float, double> v(1.5);
print(v);
}