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 (ベータ版) ではコンパイルされて返されますが、Clang 3.2 および ICC 13.0.1ではコンパイルされません(予想どおり)。
これは「診断不要」のケースですか、それとも GCC のバグですか? C++11 標準への参照が推奨されます。