Skip to content

Latest commit

 

History

History
121 lines (92 loc) · 2.71 KB

File metadata and controls

121 lines (92 loc) · 2.71 KB

tuple_element

  • utility[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp26[meta cpp]
namespace std {
  template <std::size_t I, class T> class tuple_element;

  template <std::size_t I, class T, T... Values>
  struct tuple_element<I, integer_sequence<T, Values...>> {
    using type = T;
  };

  template <std::size_t I, class T, T... Values>
  struct tuple_element<I, const integer_sequence<T, Values...>> {
    using type = T;
  };
}
  • integer_sequence[link ../integer_sequence.md]

概要

tuple_elementは、タプルとして見なせる型から、I番目の要素型を取得するためのクラスである。

<utility>ヘッダでは、integer_sequenceに関する特殊化を提供する。これにより、構造化束縛およびtemplate forinteger_sequenceを使用できる。

適格要件

  • I < sizeof...(Values)であること

基本的な使い方

#include <utility>
#include <type_traits>

int main()
{
  using Seq = std::integer_sequence<int, 0, 1, 2>;

  static_assert(std::is_same_v<
                  std::tuple_element_t<0, Seq>,
                  int
                >);
}
  • std::tuple_element_t[color ff0000]

出力

構造化束縛で使用する

構造化束縛はtuple_elementによって各要素の型を決定する。

#include <iostream>
#include <utility>

template <std::size_t Count>
void run() {
  // tuple_element<I, integer_sequence<size_t, ...>>::type が size_t であるため、
  // 各要素は size_t として束縛される
  constexpr auto [...Index] = std::make_index_sequence<Count>{};

  ((std::cout << Index << ' '), ...);
  std::cout << std::endl;
}

int main()
{
  run<3>();
}
  • std::make_index_sequence[link ../make_index_sequence.md]

出力

0 1 2 

template for文で使用する

template forはループ変数の型推論にtuple_elementを利用する。

#include <iostream>
#include <utility>

int main()
{
  // tuple_element<I, integer_sequence<int, ...>>::type は int
  template for (auto I : std::integer_sequence<int, 10, 20, 30>{}) {
    std::cout << I << ' ';
  }
  std::cout << std::endl;
}

出力

10 20 30 

バージョン

言語

  • C++26

処理系

  • Clang: 23 [mark verified]
  • GCC: 16.1 [mark verified]
  • Visual C++: 2026 Update 2 [mark noimpl]

参照