Vorsicht: Dies ist GCC 4.1.2. Wir sind auf einer proprietären Embedded-Plattform. Wir können nicht auf einen neuen Compiler aktualisieren. Also C++ 03 + TR1 ist es.verwechslung zwischen std :: [tr1 ::] ref und boost :: ref
Wir haben irgendwo eine Funktion wie folgt:
template<typename T>
void foo(const boost::any& x)
{
bar(boost::any_cast<T>(x));
}
, die dann später in einem bind Ausdruck verwendet wird:
std::tr1::bind(&foo<T>, _1);
Dies erzeugt den folgenden Fehler:
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]
Ich verstehe, dass dies ich s Koenig Lookup trifft uns. Mir fehlen jedoch Ideen, wie dieses Problem umgangen werden kann.
Jemand da draußen?
Ist der Mangel an "Ref" in Ihrem Code vorsätzlich? – Simple
@Simple: Wo siehst du einen fehlenden 'ref'? – sbi
Ihre zwei Codebeispiele haben keinen Aufruf von 'ref', während der Fehler dies tut. Ich fragte, ob das Absicht ist oder nicht. Durch Ihre Erwähnung von ADL war ich mir nicht sicher. – Simple