以下は有効な C++ コードですか?なぜですか?
std::array<std::string, 42> a1;
std::array<int, a1.size()> a2;
GCC 4.8 (C++11 モード) ではコンパイルできません。シンプルだが洗練されていない回避策があります。
std::array<std::string, 42> a1;
std::array<int, sizeof(a1)/sizeof(a1[0])> a2;
明らかに、コンパイラは std::array の要素数を把握できます。std::array::size() がconstexpr static
関数ではないのはなぜですか?
編集:別の回避策を見つけました:
std::array<std::string, 42> a1;
std::array<int, std::tuple_size<decltype(a1)>::value> a2;