Listing 3

#include <functional>
#include <iostream>
using std::cout;
using std::tr1::reference_wrapper;
using std::tr1::ref; using std::tr1::cref;

int main()
  { // demonstrate difference between assigning to
    // reference and assigning to reference_wrapper
  int i0 = 1;
  int j0 = 1;
  int i1 = 2;
  int j1 = 2;
  int& ir0(i0);
  int& ir1(i1);
  ir0 = ir1;
  cout << "assignment to reference, "
    << "i0 is " << i0 << ", "
    << "i1 is " << i1 << '\n';
  reference_wrapper<int> jr0 = ref(j0);
  reference_wrapper<int> jr1 = ref(j1);
  jr0 = jr1;
  cout << "assignment to reference_wrapper, "
    << "j0 is " << j0 << ", "
    << "j1 is " << j1 << '\n';
  return 0;
  }