考虑以下最小例子:
struct T { void operator()() { } };
struct S { void operator()(int) { } };
struct U: T, S {
U(): T{}, S{} { }
//using T::operator();
//using S::operator();
};
int main() {
U u;
u(42);
}
它与clang 3.8一样编译 无论如何,它无法使用GCC 6.1编译错误:
12:错误:成员'operator()'的请求不明确
请注意,如果取消注释using
指令,GCC 6.1可以正常工作
据我所知,没有理由出现这样的错误,似乎clang是按预期工作的那个。
在打开的错误之前,我不知道是谁,我想问一下我是否遗漏了什么。
换句话说,给出错误是在这种情况下的正确行为,或者它本身就是一个错误?