• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    <array>

    std::array::推論補助

    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

    処理系

    関連項目

    参照