Compiler Fehler VS2010 / VS2008, std::tr1::bind
-
Hi,
Folgender Code compiliert unter VS2010 mit neuem Toolset ohne Probleme.
Mit dem alten (=VS2008) Toolset wird folgende Fehlermeldung ausgegeben:1>c:\program files\microsoft visual studio 9.0\vc\include\xxpmfcaller(56): error C2100: illegal indirection
1> c:\program files\microsoft visual studio 9.0\vc\include\xxpmfcaller(64) : see reference to function template instantiation '_Ret std::tr1::_Pmf_caller2<_Ret,_Arg0>::_Call_pmf<_Pmf,_Farg0&,_Farg1&>(volatile const void ,_Pmf,std::tr1::reference_wrapper<_Ty>,wchar_t)' being compiled
1> with
1> [
1> _Ret=_Rx,
1> _Arg0=std::ctype<wchar_t>,
1> _Pmf=std::ctype<wchar_t>::_Elem (__thiscall std::ctype<wchar_t>:: const )(std::ctype<wchar_t>::_Elem) const,
1> _Farg0=std::tr1::reference_wrapper<const std::ctype<wchar_t>>,
1> _Farg1=wchar_t,
1> _Ty=const std::ctype<wchar_t>
1> ]
... weitere Fehler gleicher Art ...static std::wstring tolower(std::wstring string) { const std::ctype<wchar_t>& ct = std::use_facet<std::ctype<wchar_t> >(std::locale()); std::transform(string.begin(), string.end(), string.begin(), std::tr1::bind(&std::ctype<wchar_t>::tolower, std::tr1::cref(ct), std::tr1::placeholders::_1)); return string; }Meiner Meinung nach müsste das für den Compiler (auch mit altem Toolset) kein Problem sein. Weiss jmd. Rat?
Simon
-
Das ist ein Defekt in VC2008s TR1-Implementation, siehe http://connect.microsoft.com/VisualStudio/feedback/details/379968/std-tr1-ref-doesnt-actually-does-the-job .
Mit boost::cref funktioniert es, also kannst du ggf. darauf ausweichen.
-
Vielen Danke für die Info.
Simon