confusion between std::[tr1::]ref and boost::ref
bind, boost, c++, tr1
Solution
Define a version of `boost::ref()` specifically taking a `boost::any` and have it return the proper type. Probably
namespace boost {
std::tr1::reference_wrapper<boost::any const>
ref(boost::any const& o) {
return std::tr1::ref(o);
}
}
Problem
Beware: This is GCC 4.1.2. We're on a proprietary embedded platform. We cannot update to a new compiler. So C++03 + TR1 it is. We somewhere have a function like this: ``` template<typename T> void foo(const boost::any& x) { bar(boost::any_cast<T>(x)); } ``` which is then later used in a bind expression: ``` std::tr1::bind( &foo<T>, _1); ``` This generates the following error: ` error: call of overloaded 'ref(const boost::any&)' is ambiguous note: candidates are: std::tr1::reference_wrapper<_Tp> std::tr1::ref(_Tp&) [with _Tp = const boost::any] note: const boost::reference_wrapper boost::ref(T&) [with T = const boost::any] ` I do understand that this is Koenig lookup hitting us. However, I lack ideas about how to circumvent this problem. Anyone out there?