Expanding the parameter pack of indices in a comma expression with a value creates a copy of the value for each of the indices. Sadly, [gcc](<http://gcc.gnu.org/>) and [clang](<http://clang.llvm.org/>) think the index has no effect and warn about it ([gcc](<http://gcc.gnu.org/>) can be silenced by casting the index to void):

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
#include <utility>

template <typename T, std::size_t... I>
std::array<T, sizeof...(I)> make_array(T const& value, std::index_sequence<I...>) {
    return std::array<T, sizeof...(I)>{ (I, value)... };
}

template <int N, typename T>
std::array<T, N> make_array(T const& value) {
    return make_array(value, std::make_index_sequence<N>());
}

int main() {
    auto array = make_array<20>(std::string("value"));
    std::copy(array.begin(), array.end(),
              std::ostream_iterator<std::string>(std::cout, " "));
    std::cout << "\\n";
}