Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-10-04 13:38:10

From: "Levente Farkas" <lfarkas_at_[hidden]>
> there is a functional.hpp which enhanced function object adaptors, but
> it doesn't contain the sgi's extensions like unary_compose, compose1...
> on the other hand compose.hpp doesn't use call_traits so there can be
> "references to references" problem same as with the original functional
> and sgi's implementation. the same problem occur with bind.hpp.
> the possible solutions:
> std::compose1(f, g)
> boost::compose_f_gx(f, g)
> boost::bind(f, boost::bind(g, _1))
> Lambda Library is not usable on MSVC:-(

I'm not sure what your problem really is.

boost::bind defines result_type as the exact return type of its operator();
when I modify your example to use it:

  boost::bind<double &>(VectorAccess<std::vector<double> >(0),
   boost::bind<std::vector<double> &>(MemberAccess<A, std::vector<double>
>(&A::y), _1))),
  boost::bind<double &>(VectorAccess<std::vector<double> >(0),
   boost::bind<std::vector<double> &>(MemberAccess<A, std::vector<double>
>(&A::y), _1))),

I get a reference to reference error within the iterator adaptors library,
so any changes to functional.hpp and/or compose.hpp are unlikely to fix

(Unfortunately the iterator adaptors still contain nested bind class
templates, sigh. So bind and the iterator adaptors can't both be used on

Peter Dimov
Multi Media Ltd.

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