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