Boost logo

Boost Users :

Subject: Re: [Boost-users] Why is cref required in this nested bind example?
From: Nathan Crookston (nathan.crookston_at_[hidden])
Date: 2012-12-04 19:48:00


Hi Chris,

Chris Stankevitz wrote:

> Can someone please explain why a cref is needed in the last line of
> the attached code snippet?
>
> void f()
> {
> //bind(b, bind(a));//*1
> bind(b, cref(bind(a)));//*2
> }
>
Line *1 isn't doing the same thing as *2 -- see the documentation on nested
binds [1].

In short, *1 is evaluating a() (which returns void), then attempting to
pass that into the outer bind. I'm not sure if cref is an acceptable call
to use there -- I don't know if it would always work. It would be more
idiomatic to use protect:

bind(b, boost::protect(bind(a)))

All assuming that your actually case is more complicated than shown here,
and can't be replaced with:

bind(b, a);

HTH,
Nate

[1]http://www.boost.org/doc/libs/1_52_0/libs/bind/bind.html#nested_binds



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net