fork(2) download
  1. #include <iostream>
  2. #include <initializer_list>
  3. #include <array>
  4. #include <tuple>
  5.  
  6. template<typename T, std::size_t N, std::size_t ...Ns>
  7. std::array<T, N> make_array_impl(
  8. std::initializer_list<T> t,
  9. std::index_sequence<Ns...>)
  10. {
  11. return std::array<T, N>{ *(t.begin() + Ns) ... };
  12. }
  13.  
  14. template<std::size_t N, typename T>
  15. std::array<T, N> make_array(std::initializer_list<T> t) {
  16. if(N > t.size())
  17. throw std::out_of_range("that's crazy!");
  18. return make_array_impl<T, N>(t, std::make_index_sequence<N>());
  19. }
  20.  
  21. int main() {
  22.  
  23. constexpr std::initializer_list<int> il = { 1, 2, 3 };
  24. auto std_array = make_array<il.size()>(il);
  25.  
  26. std::initializer_list<int> il2 = { 1, 2, 3 };
  27. auto std_array2 = make_array<3>(il2);
  28.  
  29. for(auto &i : std_array)
  30. std::cout << i << ", ";
  31.  
  32. return 0;
  33. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
1, 2, 3,