mam ten kod:Visual Studio 2010 i std :: funkcja
#include <iostream>
#include <functional>
struct A
{
int operator()(int i) const {
std::cout << "F: " << i << std::endl;
return i + 1;
}
};
int main()
{
A a;
std::tr1::function<int(int)> f = std::tr1::ref(a);
std::cout << f(6) << std::endl;
}
Celem jest przekazanie obiektu funktora przez reference_wrapper, w taki sposób, aby uniknąć niepotrzebnych połączeń kopia Costructor. Spodziewam się następujący wynik:
F: 6
7
działa poprawnie z GCC> = 4.4.0, Visual Studio 2008 i podbicia przez zastąpienie nazw std :: TR1 z doładowania. To nie działa z nowym Visual Studio 2010 zarówno Express Beta 2, jak i Release Candidate.
Czy te nowe funkcje C++ są podsłuchiwane w vs2010? Czy jest jakiś błąd lub nadużycie w kodzie?
Jak to nie działa? – UncleBens
@litb: Myślę, że OP ma problemy z używaniem klasy szablonów 'std :: tr1 :: ref' i * not * boost w VS2010. – dirkgently
Oto wynik kompilacji VS2010: http://pastebin.com/YQf4Qe8W –