J'ai ce code:Visual Studio 2010 et std :: fonction
#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;
}
Le but est de passer l'objet foncteur par un reference_wrapper, de manière à éviter les appels inutiles copie de costructor. je me attends à la sortie suivante:
F: 6
7
Il fonctionne correctement avec GCC> = 4.4.0, Visual Studio 2008 et coup de pouce en remplaçant std :: espace de noms TR1 avec boost. Cela ne fonctionne pas avec le nouveau Visual Studio 2010 à la fois Express Beta 2 et Release Candidate.
Ces nouvelles fonctionnalités C++ sont-elles buggées dans vs2010? Ou il y a une erreur ou une mauvaise utilisation dans le code?
Comment ça ne marche pas? – UncleBens
@litb: Je pense que l'OP a des problèmes avec l'utilisation de la classe de template 'std :: tr1 :: ref' et * not * boost sur VS2010. – dirkgently
est ici la sortie de génération de VS2010: http://pastebin.com/YQf4Qe8W –