Почему тип array::size не зависит от размера массива ?
Вместо
constexpr size_type size() const noexcept;
Могло бы быть что-то вроде
constexpr switch<sizeof(T), 1:uint8_t, 2: uint16_t, 4: uint32_t, uint64_t> size() const noexcept;
Из-за этого приходится добавлять явное приведение типа в функции, которые принимают размер типов uint32_t.
С обычным массивом этого делать не требуется.
void f(char* buf, uint32_t size) {}
array<char, 127> arr;
f(&arr[0], static_cast<uint32_t>(arr.size()));
char carr[127];
f(&arr[0], sizeof(carr)/sizeof(carr[0])); // OK