- utility[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp26[meta cpp]
namespace std {
template <std::size_t I, class T, T... Values>
constexpr T get(integer_sequence<T, Values...>) noexcept; // (1) C++26
}- integer_sequence[link ../integer_sequence.md]
integer_sequenceから、I番目の整数値を取得する。
I < sizeof...(Values)であること
Values...のI番目の値
投げない
#include <iostream>
#include <utility>
int main()
{
using Seq = std::integer_sequence<int, 10, 20, 30>;
std::cout << std::get<0>(Seq{}) << std::endl;
std::cout << std::get<1>(Seq{}) << std::endl;
std::cout << std::get<2>(Seq{}) << std::endl;
}- std::get[color ff0000]
10
20
30
構造化束縛は内部的にget<I>を呼び出して各要素を取り出す。
#include <iostream>
#include <utility>
template <std::size_t Count>
void run() {
// 各Indexはget<I>(make_index_sequence<Count>{})から取り出される
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文はループの各反復でget<I>を呼び出す。
#include <iostream>
#include <utility>
int main()
{
// 各反復で get<0>, get<1>, get<2> が呼び出される
template for (auto I : std::make_index_sequence<3>{}) {
std::cout << I << ' ';
}
std::cout << std::endl;
}- std::make_index_sequence[link ../make_index_sequence.md]
0 1 2
- C++26
- Clang: 23 [mark verified]
- GCC: 16.1 [mark verified]
- Visual C++: 2026 Update 2 [mark noimpl]