Как я могу получить доступ к функции C++, если встроенное пространство имен имеет ту же функцию?
Следующая ситуация:
namespace abc{
inline namespace x{
int f() { return 5; }
}
inline namespace y{
int f() { return 6; }
}
int f() { return 7; }
void g(){
x::f(); // okay
y::f(); // okay
f(); // error: ambiguous!
abc::f(); // error: ambiguous!
}
}
GCC и clang согласны, вот сообщение об ошибке GCC:
<source>: In function 'void abc::g()':
<source>:16:10: error: call of overloaded 'f()' is ambiguous
16 | f(); // error: ambiguous!
| ~^~
<source>:10:9: note: candidate: 'int abc::f()'
10 | int f() { return 7; }
| ^
<source>:3:13: note: candidate: 'int abc::x::f()'
3 | int f() { return 5; }
| ^
<source>:7:13: note: candidate: 'int abc::y::f()'
7 | int f() { return 6; }
| ^
<source>:17:15: error: call of overloaded 'f()' is ambiguous
17 | abc::f(); // error: ambiguous!
| ~~~~~~^~
<source>:10:9: note: candidate: 'int abc::f()'
10 | int f() { return 7; }
| ^
<source>:7:13: note: candidate: 'int abc::y::f()'
7 | int f() { return 6; }
| ^
<source>:3:13: note: candidate: 'int abc::x::f()'
3 | int f() { return 5; }
| ^
Compiler returned: 1
Я могу явно указатьinline namespace
чтобы получить доступ к перегрузке там, но как насчетabc::f()
версия? Я не могу найти синтаксический способ доступа к нему. Неужели нет никакого способа сделать это?
Я знаю, что этот вопрос не очень важен для практики. Тем не менее, мне это интересно.
1 ответ
Вы не знаете. Символы во встроенных пространствах имен являются полностью частью окружающего их пространства имен, а также частью встроенного пространства имен.