When to Use std::variant

This section explains some possible uses of std::variant

We'll cover the following

Unless you’re doing some low-level stuff, possibly only with simple types, then unions might be a valid option [^noteGuide]. But for all other uses cases, where you need alternative types, std::variant is the way to go.

[^noteGuide]: See C++ Core Guidelines - Unions for examples of a valid use cases for unions.

Some possible uses:

• All the places where you might get a few types for a single field: so things like parsing command lines, ini files, language parsers, etc.

• Expressing efficiently several possible outcomes of a computation: like finding roots of equations.

• Error handling - for example you can return variant<Object, ErrorCode>. If the value is available, then you return Object otherwise you assign some error code.

• Finite State Machines.

• Polymorphism without vtables and inheritance (thanks to the visitor pattern).

A Functional Background

It’s also worth mentioning that variant types (also called a tagged union, a discriminated union, or a sum type) come from the functional language world and Type Theory.

Get hands-on with 1200+ tech skills courses.