J'ai écrit le code suivant sur VC10. Appeler f1 est correct, mais en appelant f2 le compilateur a montré une erreur. La différence entre les deux fonctions est seulement "template", mais le type de template n'est pas utilisé. Pourquoi l'erreur se produit-elle?Passage d'un lambda à une fonction modèle sur VC10
#include <functional>
void f1(std::tr1::function<void()> f)
{
}
template <typename >
void f2(std::tr1::function<void()> f)
{
}
int main()
{
f1([]{});
f2([]{}); // Error C2783
}
Je comprends maintenant l'erreur sur le premier code. Que diriez-vous du code suivant? Est-ce la raison de l'erreur que le compilateur ne peut pas décider du type de template car lambda génère une classe anonyme interne, mais elle est différente de std :: tr1 :: function?
#include <functional>
class MyClass
{
};
template <typename T>
void f2(std::tr1::function<void(T)> f)
{
}
int main()
{
std::tr1::function<void(MyClass)> f= [](MyClass v){};
f2(f);
f2([](MyClass v){}); // C2784
}