
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? Thanks, aaron #include <algorithm> #include <functional> #include "boost/bind.hpp" #include "boost/function.hpp" using namespace std; using namespace boost; class test { public: 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, funcBar); // 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; } };