void f() {}
namespace test
{
void f(int) {}
void g() { f(); } // error in gcc 6.2.0
}
int main()
{
test::g();
}
はグラム++ -std = C++ 1Z main.cppにでそれをコンパイルし、次のように、出力は次のようになります。gccは、グローバル名前空間でオーバーロードされた関数を隠すのはなぜですか?
main.cpp: In function 'void test::g()': main.cpp:9:4: error: too few arguments to function 'void test::f(int)' f(); // error in gcc ^ main.cpp:5:6: note: declared here void f(int) {}
私のコンパイラはGCC 6.2.0です。
グローバル名空間でgccがオーバーロードされた関数を隠すのはなぜですか?これはC++標準に準拠していますか?
TL; DR:これは既知のC++気まぐれであり、同じ理由である[基底クラスの派生クラスを非変異体の「オーバーロード」](http://stackoverflow.com/q/1628768/560648)、状況によっては 'Using Base :: foo'が必要です。 –