Boost logo

Boost :

From: Michael Goldshteyn (mgoldshteyn_at_[hidden])
Date: 2008-07-14 10:26:19


Here is a contrived example that illustrates the issue:

 

#include <boost/bind.hpp>

#include <boost/ref.hpp>

#include <string>

 

// 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<const Crayon> crefCr(cr);

 

  // This compiles

  std::string color(boost::bind(&Crayon::GetColor,_1)(cr));

 

  // This also compiles, using an explicit get on crefCr

  std::string

colorFromConstRef(boost::bind(&Crayon::GetColor,boost::bind(&boost::referenc
e_wrapper<const

Crayon>::get,_1))(crefCr));

 

  // 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));

}

 

 

 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk