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; др: это известная C++, галтель, и по той же причине, что [ «перегруженных» в производном классе вариантов скрытия в базовом классе] (http://stackoverflow.com/q/1628768/560648), требуя 'using Base :: foo' при некоторых обстоятельствах. –