Última actualización (terminología y funcionalidades de C++23): 18 de enero de 2026
Introducción
La plantilla std::variant<>, incluida por vez primera en el estándar C++17 en la cabecera <variant>, proporciona una unión etiquetada (o tipo suma) con la funcionalidad típica de las uniones de C, si bien garantizando la seguridad de tipos. Así, una instancia de tipo variante std::variant contendrá, en un instante dado, un objeto perteneciente a uno de varios tipos alternativos permitidos, o ningún valor en caso de error. Dicha instancia mantiene internamente un índice que identifica el tipo actualmente almacenado, así como una zona de memoria suficiente para contener el objeto más grande de entre sus alternativas. Es decir, el tamaño de un std::variant coincide con el del mayor alternante, más metadata.
Por ejemplo, una instancia de std::variant<char, int, double> podrá contener un carácter char, un entero int o un double, a conveniencia del programador y sin incurrir en alojamiento dinámico de memoria: