std::variant<Types...>::~variant
De es.cppreference.net
~variant();
|
(desde C++17) (constexpr desde C++20) |
|
Si valueless_by_exception() es true, no hace nada. En caso contrario, destruye el objeto actualmente contenido.
Este destructor es trivial si std::is_trivially_destructible_v<T_i> es true para todo T_i en Types....
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_variant
|
202106L
|
(C++20)
(DR) |
std::variant
completamente
constexpr
|
Ejemplo
Ejecutar este código
#include <cstdio> #include <variant> int main() { struct X { ~X() { puts("X::~X();"); } }; struct Y { ~Y() { puts("Y::~Y();"); } }; { puts("entering block #1"); std::variant<X,Y> var; puts("leaving block #1"); } { puts("entering block #2"); std::variant<X,Y> var{ std::in_place_index_t<1>{} }; // constructs var(Y) puts("leaving block #2"); } }
Salida:
entering block #1 leaving block #1 X::~X(); entering block #2 leaving block #2 Y::~Y();
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2231R1 | C++20 | el destructor no era constexpr mientras que los destructores no triviales pueden ser constexpr en C++20 | hecho constexpr |