给定以下代码,歧义背后的原因是什么?我可以规避它还是必须保留(烦人的)显式演员表?
#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<int ()>参数的函数注释掉并a(x)在main中调用,由于唯一可用函数之间的类型不匹配x以及参数不正确,编译将正确失败。如果在这种情况下编译器失败,那么当两个函数同时存在时,为什么会有歧义?function<int (int)>a()a()
我已经尝试使用VS2010和g ++ v。4.5。两者都给我完全相同的歧义。
万千封印
相关分类