最終更新日時:
が更新

履歴 編集

<array>

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

namespace std {
  template <class T, class... U>
  array(T, U...) -> array<T, 1 + sizeof...(U)>;
}

概要

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

要件

  • U...のすべての型は、型Tと同じ型であること

備考

  • std::arrayクラステンプレートは0要素の配列もサポートしているが、推論補助では1要素以上の配列しか受け付けられない。0要素の配列からは、要素型が推論できない

#include <array>
#include <type_traits>

int main()
{
  std::array ar = {1, 2, 3};
  static_assert(std::is_same_v<
    decltype(ar),
    std::array<int, 3>
  >);

  // 受け付けない例1
  // 0要素の配列
  // std::array empty_ar {}; // コンパイルエラー!0要素配列はstd::arrayに推論できない

  // 受け付けない例2
  // 異なる要素型の配列
  // int mixed_raw_ar[] = {1, 0u}; // OK。異なる要素型が混ざっていても、左辺の型によって要素がint型に変換される
  // std::array mixed_ar = {1, 0u}; // コンパイルエラー!すべての要素型は同じ型となるべき

  // 受け付けない例3
  // 文字列リテラルの代入
  // std::array s = "Hello"; // コンパイルエラー!std::array<char, 6>を意図していたが、ポインタに変換されて推論できない
  // std::array s {"Hello"}; // OKだが、std::array<const char*, 1>となる
}

出力

バージョン

言語

  • C++17

処理系

関連項目

参照