#include<vector>
#include<utility>
namespace details {
struct adl_helper { };
template <class T, class Adl>
std::vector<T> make_vector(Adl, T value, size_t size) {
return std::vector<T>(size, value);
}
template <class T, class Adl, class... Args,
class R_T = decltype(
make_vector<T>(Adl{},
std::declval<T>(),
std::declval<Args>()...)),
class R = std::vector<R_T>
>
R make_vector(Adl, T value, size_t first, Args... sizes) {
auto inner = make_vector<T>(Adl{}, value, std::forward<Args>(sizes)...);
return R(first, inner);
}
}
// namespace details
template <class T, class... Args,
class R = decltype(
details::make_vector<T>(details::adl_helper{},
std::declval<T>(),
std::declval<Args>()...))
>
R initialize_vector(T value, Args... args) {
return details::make_vector<T>(details::adl_helper{},
value,
std::forward<Args>(args)...);
}