最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<variant>

# std::holds_alternative(C++17)

    namespace std {
      template <class T, class... Types>
      constexpr bool holds_alternative(const variant<Types...>& x) noexcept;
    }

## 概要

`variant`オブジェクトが指定の候補型を現在保持しているかを判定する。

## 要件

- 型`T`が`Types...`内に一度だけ現れること。そうでない場合、プログラムは不適格となる

## 戻り値

型`T`の`Types...`でのインデックスと`x.index()`が等値である場合に`true`を返し、そうでなければ`false`を返す。

## 例

    #include <iostream>
    #include <variant>

    int main()
    {
      std::variant<int, char, double> v = 'a';

      if (std::holds_alternative<char>(v)) {
        std::cout << "vはchar型を現在保持している" << std::endl;
      }

      if (!std::holds_alternative<int>(v)) {
        std::cout << "vはint型を現在保持していない" << std::endl;
      }
    }

### 出力

    vはchar型を現在保持している
    vはint型を現在保持していない

## バージョン

### 言語

- C++17

### 処理系

- Clang: 4.0 ✅
- GCC: 7.3 ✅
- ICC: ??
- Visual C++: ??