fork download
  1. #include <type_traits>
  2. #include <iterator>
  3. #include <iostream>
  4.  
  5. template < typename T, std::size_t N > struct c_array
  6. {
  7. static_assert( std::is_pod<T>::value, "must be a pod!" ) ;
  8. static_assert( N, "size must be a non-zero!" ) ;
  9.  
  10. c_array() : a { T() } {}
  11. template < typename... U > c_array( U&&... args ) : a { args... } {} // ??
  12.  
  13. T& operator[] ( std::size_t p ) { return a[p] ; }
  14. const T& operator[] ( std::size_t p ) const { return a[p] ; }
  15.  
  16. T* begin() { return std::begin(a) ; }
  17. T* end() { return std::end(a) ; }
  18. const T* begin() const { return std::begin(a) ; }
  19. const T* end() const { return std::end(a) ; }
  20.  
  21. T a[N] ;
  22. };
  23.  
  24. int main()
  25. {
  26. c_array<int,5> a ;
  27. for( auto i : a ) std::cout << i << ' ' ; std::cout << '\n' ;
  28.  
  29. c_array<long,6> b { 1, 2, 3, 4 };
  30. for( auto i : b ) std::cout << i << ' ' ; std::cout << '\n' ;
  31. }
  32.  
Success #stdin #stdout 0s 2852KB
stdin
Standard input is empty
stdout
0 0 0 0 0 
1 2 3 4 0 0