Visiting variants

When accessing variables in the std::variant, we use the global function std::visit(). As you might have guessed, we have to use our main companion when dealing with heterogeneous types; the polymorphic lambda:

std::visit( 
  [](const auto& v){ std::cout << v; },  
  my_variant 
); 

The compiler then generates a regular C++ of the lambda, for every type contained in the variant. Thus, when invoking std::visit() with the lambda and variant type in the example, the compiler would generate code roughly similar to the following snippet where the polymorphic lambda is converted to a regular class with operator() overloads for every type in the variant

Note that as very complex code are involved in expanding both a polymorphic lambda ...

Get C++ High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.