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);
}
}


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)...);
}