最終更新日時(UTC):
が更新

履歴 編集

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

処理系