Boost logo

Boost Users :

From: Simmons, Aaron (a-simmons1_at_[hidden])
Date: 2005-08-10 11:44:14

I'm trying to use boost::bind and boost::function with std::logical_not
and I've run into some strange template magic that I don't understand.
In the example below, I use boost::function to help compose several
boost::bind calls so that I don't have to do it all on one line (I find
that this improves readability). The problem is that when I do this,
the functions that are bound with boost::bind never get called. They
will get called only if I construct everything on one line. (???)


Is this expected behavior? If so, why does it work like this?








#include <algorithm>

#include <functional>

#include "boost/bind.hpp"

#include "boost/function.hpp"


using namespace std;

using namespace boost;


class test {


    void bindtest() {

        // test1: composed gradually for clarity


        function<bool ()> funcFoo = bind(&test::foo, this);

        function<bool ()> funcBar = bind(&test::bar, this);

        function<bool ()> funcTest1= bind(logical_and<bool>(), funcFoo,


        // doesn't call test::foo or test::bar! (returns true)

        bool test1= funcTest1();

        cout << "test1= " << test1 << endl;


        // test2: composed directly on one line

        function<bool ()> funcTest2= bind(logical_and<bool>(),

                                          bind(&test::foo, this),

                                          bind(&test::bar, this) );


        // calls test::foo and test::bar (returns false)

        bool test2= funcTest2();

        cout << "test2= " << test2 << endl;



    bool foo()


        cout << "foo" << endl;

        return false;



    bool bar()


        cout << "bar" << endl;

        return false;




Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at