fork(1) download
  1. #include <array>
  2. #include <iostream>
  3. #include <iterator>
  4. #include <initializer_list>
  5.  
  6. template <typename T, size_t N>
  7. struct Array
  8. {
  9. private:
  10. T data[N];
  11. public:
  12. constexpr Array(std::initializer_list<T> init)
  13. : data{}
  14. {
  15. if (init.size() > N) {
  16. throw "overflow";
  17. }
  18. using std::begin;
  19. using std::end;
  20. auto dst = begin(data);
  21. for (auto src = begin(init); src != end(init); ++src, ++dst) {
  22. *dst = *src;
  23. }
  24. }
  25.  
  26. auto begin() const { return std::begin(data); }
  27. auto end() const { return std::end(data); }
  28. };
  29.  
  30. template <typename T, size_t N>
  31. std::ostream& operator << (std::ostream& output, const Array<T, N>& array)
  32. {
  33. output << "[";
  34. for (auto&& element : array)
  35. output << " " << element;
  36.  
  37. return output << " ]";
  38. }
  39.  
  40. int main()
  41. {
  42. static constexpr Array<int, 4> m{-1, -2, -3, -4};
  43. std::cout << m << std::endl;
  44. static constexpr Array<Array<int, 2>, 2> n{{0, 1}, {2, 3}};
  45. std::cout << n << std::endl;
  46. }
  47.  
  48.  
Success #stdin #stdout 0s 4380KB
stdin
Standard input is empty
stdout
[ -1 -2 -3 -4 ]
[ [ 0 1 ] [ 2 3 ] ]