void f() {}
namespace test
{
void f(int) {}
void g() { f(); } // error in gcc 6.2.0
}
int main()
{
test::g();
}
Biên dịch nó với g ++ -std = C++ 1Z main.cpp, đầu ra là như sau:Tại sao gcc ẩn các hàm bị quá tải trong không gian tên chung?
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) {}
trình biên dịch của tôi là gcc 6.2.0.
Tại sao gcc ẩn các chức năng quá tải trong không gian tên chung? Điều này có phù hợp với tiêu chuẩn C++ không?
tl; dr: đây là một ẩn danh C++ đã biết, và cùng một lý do rằng ["quá tải" trong lớp dẫn xuất ẩn biến thể trong một lớp cơ sở] (http://stackoverflow.com/q/1628768/560648), yêu cầu 'sử dụng Base :: foo' trong một số trường hợp. –