Это определено так, потому что size_t
определено как достаточное для всех массивов. Если вы хотите меньший тип для меньших массивов, вы всегда можете при необходимости сузить на основе значений constexpr
.
template <typename Array>
struct small_array_size
{
using type = size_t
};
template <typename T, size_t N, typename = std::enable_if_t<N < 256>>
struct small_array_size<std::array<T, N>>
{
using type = uint8_t;
};
template <typename T, size_t N, typename = std::enable_if_t<N < 65536>>
struct small_array_size<std::array<T, N>>
{
using type = uint16_t;
};
template <typename Array>
using small_array_size_t = typename small_array_size<Array>::type;