L'argument du modèle (la signature) de la fonction std :: n'est-il pas une partie de ce type?
-
30-10-2019 - |
Question
Compte tenu du code suivant, quelle est la raison de l'ambiguïté? Puis-je le contourner ou devrai-je garder les moulages explicites (ennuyeux)?
#include <functional>
using namespace std;
int a(const function<int ()>& f)
{
return f();
}
int a(const function<int (int)>& f)
{
return f(0);
}
int x() { return 22; }
int y(int) { return 44; }
int main()
{
a(x); // Call is ambiguous.
a(y); // Call is ambiguous.
a((function<int ()>)x); // Works.
a((function<int (int)>)y); // Works.
return 0;
}
Fait intéressant, si je commençais le a()
fonction avec le function<int ()>
paramètre et appel a(x)
Dans mon principal, la compilation échoue correctement en raison de la décalage du type entre x
Et l'argument function<int (int)>
du seul a()
fonction disponible. Si le compilateur échoue dans ce cas, pourquoi y aurait-il une ambiguïté lorsque les deux a()
Les fonctions sont présentes?
J'ai essayé avec VS2010 et G ++ v. 4.5. Les deux me donnent exactement la même ambiguïté.
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow