Учитывая следующий код, в чем причина неоднозначности? Могу ли я обойти это или мне придется сохранить (раздражающие) явные приведения?
#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;
}
Интересно, если я закомментирую функцию a ()
с помощью функции function
и вызовите a (x)
в моем основном файле, компиляция завершится ошибкой из-за несоответствия типов между x
и аргументом функцией
единственной доступной функции a ()
. Если в этом случае компилятор выйдет из строя, зачем возникать двусмысленность, когда присутствуют две функции a ()
?
Я пробовал с VS2010 и g ++ v. 4.5. Оба дают мне одинаковую двусмысленность.