id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 2128,Add the ability to implicitly traverse reference wrappers,mgoldshteyn@…,Peter Dimov,"Please add the following to boost: namespace boost { template T* get_pointer( reference_wrapper const & r ) { return r.get_pointer(); } } ---- Code demonstrating the issue: #include #include #include // Define a simple class for our example class Crayon { public: explicit Crayon(const std::string &color=std::string()):m_color(color) {} const std::string &GetColor() const {return m_color;} private: std::string m_color; }; int main(int argc, char *argv[]) { using namespace std; using namespace boost; Crayon cr(""blue""); boost::reference_wrapper crefCr(cr); // This doesn't compile, however, even though the reference_wrapper class template has // an overloaded operator T& () const function std::string colorFromConstRef2(boost::bind(&Crayon::GetColor,_1)(crefCr)); } ---- Peter Dimov's reply: It doesn't because of the mem_fn behavior that bind inherits. The argument is not a reference to Crayon and so is assumed to be a smart pointer to Crayon. mem_fn then tries to invoke get_pointer() on it to obtain a Crayon*. You should be able to make it compile by adding a get_pointer overload for reference_wrapper: namespace boost { template T* get_pointer( reference_wrapper const & r ) { return r.get_pointer(); } } ",Feature Requests,closed,Boost 1.39.0,bind,Boost 1.35.0,Problem,fixed,implicitly traverse reference_wrappers,