Question

When I use boost::bind with a method name which is declared both const and non-const I am getting in ambiguous error, for example

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

How can I solve this problem?

Was it helpful?

Solution

The problem together with workarounds is descibed in FAQ part of Boost.Bind reference.

You could also make use of utility functions like the following:

#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 );
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top