最終更新日時:
が更新

履歴 編集

class template
<tuple>

std::tuple_size(C++11)

namespace std {
  template <class T> class tuple_size; // 宣言のみで定義なし

  template <class T> class tuple_size<const T>;
  template <class T> class tuple_size<volatile T>;
  template <class T> class tuple_size<const volatile T>;

  template <class... Types>
  class tuple_size<tuple<Types...>>
    : public integral_constant<size_t, sizeof...(Types)> {};
}

概要

tuple_sizeは、タプルとして見なせる型の要素数を取得するためのクラスである。

要素数は、integral_constantの機能を利用してコンパイル時の定数値として取得できる。

  • template <class T> class tuple_size;

    特殊化のための先行宣言。特殊化されていない型の場合、定義が行われないため要素数を取得しようとする段階でコンパイルエラーとなる。

  • template <class T> class tuple_size<const T>;

  • template <class T> class tuple_size<volatile T>;
  • template <class T> class tuple_size<const volatile T>;

    CV修飾された型からも要素数を取得できるようにするための部分特殊化。

  • template <class... Types> class tuple_size<tuple<Types...>>;

    std::tupleの要素数を取得できるようにするための部分特殊化。

  • Tがタプルと見なせない型であった場合、

    • C++11 : 仕様で明確に規定されてはいないが、直接的にコンパイルエラーとなる
    • C++17 : メンバvalueが定義されない (SFINAEと組み合わせて扱える)

#include <tuple>

int main()
{
  static_assert(std::tuple_size<               std::tuple<int, int, int>>::value == 3, "");
  static_assert(std::tuple_size<const          std::tuple<int, int, int>>::value == 3, "");
  static_assert(std::tuple_size<volatile       std::tuple<int, int, int>>::value == 3, "");
  static_assert(std::tuple_size<const volatile std::tuple<int, int, int>>::value == 3, "");
}

出力

バージョン

言語

  • C++11

処理系

参照