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

履歴 編集

variable
<variant>

# std::variant_npos(C++17)

    namespace std {
      inline constexpr std::size_t variant_npos = -1;
    }

## 概要

`variant_npos`は、候補型の無効なインデックス値を表す定数である。

`std::variant`クラスは、0番目の候補型でデフォルト構築するため、通常の操作ではどの型も代入されない状態にはならない。ただし、`valueless_by_exception()`メンバ関数が`true`を返す例外的な状況ではどの型も代入されていない状態になる。

そのような状況で、`index()`メンバ関数がこの値を返すようになる。

## 例

    #include <iostream>
    #include <variant>

    struct S { operator int() { throw 42; }};

    int main()
    {
      std::variant<float, int> v = 12.f;
      try {
        v.emplace<1>(S());
      }
      catch (...) {}

      if (v.index() == std::variant_npos) {
        std::cout << "empty" << std::endl;
      }
      else {
        std::cout << "not empty" << std::endl;
      }
    }

### 出力

    empty

## バージョン

### 言語

- C++17

### 処理系

- Clang: 4.0.1 ✅
- GCC: 7.3 ✅
- Visual C++: ??