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