Проблема, с которой я столкнулся, заключалась в том, что при инициализации массива с одним элементом инициализируется весь массив, а не только первый элемент.
Как предложил @aschepler, использование целочисленных последовательностей исправляет ошибку компилятора:
#include <utility>
template <typename T, unsigned int S>
class Vec
{
std::array<T, S> data;
public:
constexpr Vec(const T& s)
: Vec(s, std::make_integer_sequence<unsigned int, S>{}) {}
private:
template <unsigned int... Seq>
constexpr Vec(const T& s, std::integer_sequence<unsigned int, Seq...>)
: data{(static_cast<void>(Seq), s)...} {}
};
template <typename T, unsigned int Rows, unsigned int Cols>
class Mat
{
std::array<Vec<T, Cols>, Rows> data;
public:
constexpr Mat(const T& s)
: Mat(s, std::make_integer_sequence<unsigned int, Rows>{}) {}
private:
template <unsigned int... Seq>
constexpr Mat(const T& s, std::integer_sequence<unsigned int, Seq...>)
: data{(static_cast<void>(Seq), Vec<T, Cols>(s))...} {}
};