令我惊讶的是,GCC 不认为foo()
以下程序中的调用不明确:
#include <iostream>
struct B1 { bool foo(bool) { return true; } };
struct B2 { bool foo(bool) { return false; } };
struct C : public B1, public B2
{
using B1::foo;
using B2::foo;
};
int main()
{
C c;
// Compiles and prints `true` on GCC 4.7.2 and GCC 4.8.0 (beta);
// does not compile on Clang 3.2 and ICC 13.0.1;
std::cout << std::boolalpha << c.foo(true);
}
上面的函数调用true
在 GCC 4.7.2 和 GCC 4.8.0(beta)上编译并返回,而在 Clang 3.2 和 ICC 13.0.1 上它不会编译(如我所料)。
这是“不需要诊断”的情况,还是 GCC 中的错误?鼓励参考 C++11 标准。