L'argument du modèle (la signature) de la fonction std :: n'est-il pas une partie de ce type?

StackOverflow https://stackoverflow.com/questions/5931214

  •  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
scroll top