Listing 5
#include <algorithm>
#include <array>
#include <functional>
#include <iostream>
#include <iterator>
using std::tr1::array;
using std::cout; using std::ostream_iterator;
using std::equal_to; using std::unique;
using std::tr1::reference_wrapper; using std::tr1::ref;
typedef int elt;
typedef array<elt, 7> arr;
typedef arr::iterator arr_it;
template <class Func>
void apply(Func func)
{ // use func to eliminate duplicates in a range
arr data = { 1, 1, 2, 3, 3, 3, 5 };
arr_it end = unique(data.begin(), data.end(), func);
copy(data.begin(), end, ostream_iterator<elt>(cout, " "));
cout << '\n';
}
int main()
{
reference_wrapper<equal_to<int> > rw = ref(equal_to<int>());
apply(rw);
return 0;
}