How do I initialize std::array if T is not default constructible?
I know it\'s possible to initialize it like that:
Given N, you could generate a sequence-type calledseq<0,1,2,3,...N-1> using a generator called genseq_t<>, then do this:
template
void f(T value)
{
//genseq_t is seq<0,1,...N-1>
std::array items = repeat(value, genseq_t{});
}
where repeat is defined as:
template
auto repeat(T value, seq) -> std::array
{
//unpack N, repeating `value` sizeof...(N) times
//note that (X, value) evaluates to value
return {(N, value)...};
}
And the rest is defined as:
template
struct seq
{
using type = seq;
static const std::size_t size = sizeof ... (N);
template
struct push_back : seq {};
};
template
struct genseq : genseq::type::template push_back {};
template<>
struct genseq<0> : seq<> {};
template
using genseq_t = typename genseq::type;
Online demo
Hope that helps.