
Hi there, I'm sure it's not a bug in bind but I have found a surprising behavior when using it. In my project I have to use some old school c++ classes that use character arrays instead of std::string. The following code displays a difference when using two ways of printing those character arrays. #include <iostream> #include <string> #include <vector> #include <algorithm> #include <functional> #include <boost/bind.hpp> using namespace std; using namespace boost; class A { public: A( string name ) { strncpy( _name, name.c_str(), name.length() + 1 ); } string name() const { return _name; } private: char _name[80]; }; void print( const char* s ) { cout << s << endl; } int main(int argc, char* argv[]) { vector<A> as; as.push_back( A( "A" )); as.push_back( A( "B" )); for_each( as.begin() , as.end() , bind( &print , bind( &std::string::c_str , bind( &A::name, _1 )))); vector<A>::const_iterator it = as.begin(); vector<A>::const_iterator end = as.end(); for( ; it != end; ++it ) { cout << it->name() << endl; } return 0; } The output should be A B A B But instead it's A B The foreach loop doesn't print anything. The problem is when calling the print function the char* points to an empty string. Can somebody please enlightening, here. Thanks, Christian