Distinguish between const and non-const with the same name in boost :: bind

When I use boost::bindwith a method name declared both const and non-const, I get an ambiguous error like

boost::bind( &boost::optional<T>::get, _1 )

How can I solve this problem?

+5
source share
1 answer

The problem along with workarounds is described in the FAQ section of Boost.Bind .

You can also use utility functions, such as:

#include <boost/bind.hpp>
#include <boost/optional.hpp>

template <class Ret, class Obj>
Ret (Obj::* const_getter(Ret (Obj::*p) () const)) () const
{
    return p;
}

template <class Ret, class Obj>
Ret (Obj::* nonconst_getter(Ret (Obj::*p)())) ()
{
    return p;
}

int main()
{
    boost::bind( const_getter(&boost::optional<int>::get), _1 );
    boost::bind( nonconst_getter(&boost::optional<int>::get), _1 );
}
+6
source

All Articles