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