Skip to content

Files

67 lines (52 loc) · 2.18 KB

in_place_index_t.md

File metadata and controls

67 lines (52 loc) · 2.18 KB

in_place_index_t

  • utility[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp17[meta cpp]
namespace std {
  template<std::size_t I>
  struct in_place_index_t {
    explicit in_place_index_t() = default;
  };

  template<size_t I>
  inline constexpr in_place_index_t<I> in_place_index{};
}

概要

in_place_index_tクラスは、標準ライブラリの特定機能のコンストラクタに渡すことができる、曖昧性の解消タグである。曖昧性については、例を参照。

備考

デフォルトコンストラクタにexplicitが付いているのは、in_place_index_t<T> x = {};のように=付きの波カッコ初期化を禁止するためである。ユーザーは通常、in_place_index_t<T>型の定数として事前定義されているin_place_index<T>を使用すればよいので、問題にはならない。

#include <iostream>
#include <variant>

int main()
{
  // std::variant<int, int> x { 1 }; // どちらの int か曖昧

  std::variant<int, int> x {
    std::in_place_index<0>,
    1
  }; // テンプレート引数の最初の int に 1 を格納して構築

  std::visit([](auto&& arg){std::cout << arg;}, x);
}
  • std::in_place_index[color ff0000]
  • std::variant[link /reference/variant/variant.md]
  • std::visit[link /reference/variant/visit.md]

出力

1

バージョン

言語

  • C++17

処理系

参照