fork download
  1. #include <cstddef>
  2. #include <initializer_list>
  3.  
  4. template<std::size_t...>
  5. struct indices {};
  6.  
  7. template<std::size_t N, std::size_t... Indices>
  8. struct make_indices:
  9. make_indices<N-1, N-1, Indices...>
  10. {};
  11.  
  12. template<std::size_t... Indices>
  13. struct make_indices<0, Indices...>:
  14. indices<Indices...>
  15. {};
  16.  
  17. template<typename T>
  18. struct array:
  19. public std::initializer_list<T>
  20. {
  21. constexpr array(std::initializer_list<T> values):
  22. std::initializer_list<T>(values)
  23. {}
  24.  
  25. constexpr auto operator[](std::size_t n)
  26. -> T
  27. {
  28. return this->begin()[n];
  29. }
  30. };
  31.  
  32. template<typename T, std::size_t... I>
  33. auto constexpr add_one(const array<T>& a, indices<I...>)
  34. -> const array<T>
  35. {
  36. return { (a[I]+1)... };
  37. }
  38.  
  39. int main()
  40. {
  41. constexpr array<int> a = { 1, 2, 3 };
  42. constexpr auto b = add_one(a, make_indices<a.size()>());
  43.  
  44. return 0;
  45. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:42:59: error: ‘const array<int>{std::initializer_list<int>{((const int*)(& const int [3]{2, 3, 4})), 3u}}’ is not a constant expression
stdout
Standard output is empty