最終更新日時:
が更新

履歴 編集

<tuple>

std::tuple::推論補助(C++17)

namespace std {
  template <class... UTypes>
  tuple(UTypes...) -> tuple<UTypes...>;           // (1)

  template <class T1, class T2>
  tuple(pair<T1, T2>) -> tuple<T1, T2>;           // (2)

  template <class Alloc, class... UTypes>
  tuple(allocator_arg_t, Alloc, UTypes...)
    -> tuple<UTypes...>;                          // (3)

  template <class Alloc, class T1, class T2>
  tuple(allocator_arg_t, Alloc, pair<T1, T2>)
    -> tuple<T1, T2>;                             // (4)

  template <class Alloc, class... UTypes>
  tuple(allocator_arg_t, Alloc, tuple<UTypes...>)
    -> tuple<UTypes...>;                          // (5)
}

概要

std::tupleクラステンプレートの型推論補助。

  • (1) : 任意の型のオブジェクトを任意個受け取る場合の推論補助
  • (2) : std::pairを受け取る場合の推論補助
  • (3) : アロケータ付きで、任意の型のオブジェクトを任意個受け取る場合の推論補助
  • (4) : アロケータ付きで、std::pairを受け取る場合の推論補助
  • (5) : アロケータ付きで、std::tupleを受け取る場合の推論補助

備考

#include <tuple>
#include <type_traits>

int main()
{
  // (1)
  // 任意個のオブジェクトからのタプルの構築
  std::tuple t1 {3, "Hello", 1.23};
  static_assert(std::is_same_v<
    decltype(t1),
    std::tuple<int, const char*, double>
  >);

  // (2)
  // 組からのタプルの構築
  std::tuple t2 = std::pair{3, "Hello"};
  static_assert(std::is_same_v<
    decltype(t2),
    std::tuple<int, const char*>
  >);
}

出力

バージョン

言語

  • C++17

処理系

関連項目

参照