Espacios de nombres
Variantes
Acciones

std::monostate

De cppreference.com
< cpp‎ | utility‎ | variant
 
 
Biblioteca de servicios
 
 
Definido en el archivo de encabezado <variant>
struct monostate { };
(desde C++17)

Tipo de unidad destinado a usarse como una alternativa vacía de buen comportamiento en std::variant. En particular, un variante de tipos no construibles por defecto puede incluir std::monostate como su primera alternativa: esto hace que el variante en sí mismo sea construible por defecto.

Contenido

[editar] Funciones miembro

(constructor)
(implícitamente declarado)
Constructor trivial implícito por defecto/de copia/de movimiento.
(función miembro pública)
(destructor)
(implícitamente declarado)
Destructor trivial implícito.
(función miembro pública)
operator=
(implícitamente declarado)
Operador de asignación trivial implícito de copia/de movimiento.
(función miembro pública)

[editar] Funciones no miembro

constexpr bool operator==(monostate, monostate) noexcept { return true; }
(desde C++17)
constexpr bool operator!=(monostate, monostate) noexcept { return false; }

constexpr bool operator<(monostate, monostate) noexcept { return false; }
constexpr bool operator>(monostate, monostate) noexcept { return false; }
constexpr bool operator<=(monostate, monostate) noexcept { return true; }

constexpr bool operator>=(monostate, monostate) noexcept { return true; }
(desde C++17)
(hasta C++20)
constexpr std::strong_ordering operator<=>(monostate, monostate) noexcept
{ return std::strong_ordering::equal; }
(desde C++20)

Todas las instancias de std::monostate se comparan iguales.

[editar] Clases auxiliares

std::hash<std::monostate>

template <> struct std::hash<monostate>;

Especializa el algoritmo std::hash para std::monostate.

[editar] Ejemplo

#include <variant>
#include <iostream>
 
struct S
{
    S(int i) : i(i) {}
    int i;
};
 
int main() {
 
    // Sin el tipo monostate esta declaración fallaría.
    // Esto es porque S no es construible por defecto.
 
    std::variant<std::monostate, S> var; 
 
    // var.index() ahora es 0 - el primer elemento
    // std::get<S> lanzará! Necesitamos asignar un valor
 
    var = 12; 
 
    std::cout << std::get<S>(var).i << '\n';
}

Salida:

12


[editar] Véase también

Construye el objeto variante.
(función miembro pública) [editar]