にコンパイルエラーが発生することはありません。私は、GCCががあいまい次のプログラムでfoo()
への呼び出しを検討していないという事実に驚いた:上記の関数呼び出しがコンパイル明らかにあいまいな呼び出しは、GCC
#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);
}
をし、 GCC 4.7.2とGCC 4.8.0(ベータ版)にtrue
を返しますが、はClang 3.2とICC 13.0.1で(私が期待していた通りです)をコンパイルしません。
これは「診断不要」 "のケースですか、それともGCCのバグですか? C++ 11標準への参照が推奨されています。
VC11でビルドに失敗しました。あいまいな呼び出しエラー。 –
@MarkGarcia:はい、それはGCCだけが受け入れるようです。問題は、これがバグに起因するのか、この種のエラーに診断が必要ないのかです。 –
FWIW、g ++ 4.4.3では、 'main'で' foo'を使うのではなく、 'C'で' using'ですでにエラーが出ています: 'ambig.cc:9:error:using using 'B2 :: foo 'は以前の宣言を使って競合する ' – us2012