- 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 for文でinteger_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文はループ変数の型推論に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]