# std::variant<Types...>::~variant

< cpp‎ | utility‎ | variant

~variant(); |  | (C++17 起) (C++20 前)
constexpr ~variant(); |  | (C++20 起)

若 `valueless_by_exception()` 为 true ，则不做任何事。否则销毁当前所含值。

若对于所有 `Types...` 中的 `T_i` ， std::is_trivially_destructible_v<T_i> 为 `true` ，则此析构函数为平凡。

### 示例

    #include <variant>
    #include <cstdio>

    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");
        }
    }

输出：

    entering block #1
    leaving block #1
    X::~X();
    entering block #2
    leaving block #2
    Y::~Y();

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
P2231R1 | C++20 | 析构函数不是 constexpr ，而非平凡析构函数在 C++20 中能为 constexpr | 使之为 constexpr