Boost logo

Boost :

From: Neal D. Becker (nbecker_at_[hidden])
Date: 2002-10-15 10:31:45

I noticed the new ref.hpp. The description sounds like just what I
need. I want to pass a function object to std::generate by reference.

I made a small test, but it doesn't work. Am I doing something wrong,
or is ref.hpp not the solution to my problem?

#include <boost/ref.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

struct counter {
  int i;
  counter () : i (0) {}
  int operator()() { return i++; }

int main () {
  counter c;

  std::generate_n (ostream_iterator<int> (cout, " "), 10, boost::ref(c));
  cout << '\n';
  std::generate_n (ostream_iterator<int> (cout, " "), 10, boost::ref(c));
  cout << '\n';

g++ -g -o TestRef -I /usr/local/src/boost
/usr/include/c++/3.2/bits/stl_algo.h: In function `_OutputIter
   std::generate_n(_OutputIter, _Size, _Generator) [with _OutputIter =
   std::ostream_iterator<int, char, std::char_traits<char> >, _Size = int,
   _Generator = boost::reference_wrapper<counter>]': instantiated from here
/usr/include/c++/3.2/bits/stl_algo.h:952: no match for call to `(
   boost::reference_wrapper<counter>) ()'

Boost list run by bdawes at, gregod at, cpdaniel at, john at