Boost logo

Boost :

From: Douglas Gregor (gregod_at_[hidden])
Date: 2001-11-15 11:47:21

On Thursday 15 November 2001 11:08 am, you wrote:
> std::for_each(v.begin(), v.end(), ref(x) += _1);
> ref(x) is a function object such that ref(x)(y) returns a reference to x.
> _1(y) returns a reference to y. (E1 += E2)(y) returns E1(y) += E2(y). So
> Does this make more sense?

This strikes me as an implementation detail. A variable or constant should be
a nullary function object, not an n-ary function object with all n arguments
ignored. If Lambda needs to ignore arguments, it should do it with
a wrapper around ref:

template<typename T>
struct ignore_ref_arguments {
  T& operator()() { return m_ref; }

  template<typename A>
  T& operator()(A&) { return m_ref; }

  // more operator()'s... with the same body { return m_ref; }

  ref<T> m_ref;


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