Listing 4

#include <array>
#include <ostream>
#include <iostream>
using std::tr1::array;
using std::cout; using std::basic_ostream;

struct S
  {
  S() : val(-1) {}
  S(int i) : val(i + 1) {}
  int val;
  };

template <class Elem, class Traits>
basic_ostream<Elem, Traits>& operator<<(
  basic_ostream<Elem, Traits>& os, S s)
  {
  return os << s.val;
  }

int main()
  { // demonstrate array initialization
  const int size = 7;
  S carray[size] = { 1, 1, 2, 3, 5 };
  array<S, size> arr = { 1, 1, 2, 3, 5 };
  for (int i = 0; i < size; ++i)
    cout << carray[i] << ' ';
  cout << '\n';
  for (int i = 0; i < size; ++i)
    cout << arr[i] << ' ';
  cout << '\n';
  return 0;
  }