O argumento do modelo (a assinatura) do std :: function não faz parte do seu tip
Dado o código a seguir, qual é o motivo por trás da ambiguidade? Posso contorná-lo ou terei que manter os lançamentos explícitos (irritantes)?
#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;
}
Curiosamente, se eu comentar oa()
função com ofunction<int ()>
parâmetro e chamea(x)
no meu principal, a compilação falha corretamente devido à incompatibilidade de tipo entrex
e o argumentofunction<int (int)>
do únicoa()
função disponível. Se o compilador falhar nesse caso, por que haveria ambiguidade quando os doisa()
unções estão presente
Eu tentei com o VS2010 e o g ++ v. 4.5. Ambos me dão exatamente a mesma ambiguidad