Я хотел бы видеть пример игнорирования имени функции в спецификаторе вложенного имени
Примечание к ноге (33) на странице 53 документа N4140:
Поиск, в котором имена функций игнорируются, включает имена, появляющиеся в спецификаторе вложенного имени, подробном спецификаторе типа или базовом спецификаторе.
1 ответ
namespace A
{
void std();
void foo()
{
std::cout << "Hello World"; // (1)
}
};
В 1), std
не может назвать функцию, поэтому функция A::std
игнорируется при поиске, и код компилируется.
Это правило явно упоминается в [basic.lookup.qual]/1:
Если
::
Оператору разрешения области в спецификаторе вложенного имени не предшествует спецификатор decltype, поиск имени которого предшествует::
рассматривает только пространства имен, типы и шаблоны, специализация которых - типы.
Другой пример из списка включает
class A : B {};
Вот, B
не может назначить функцию, поэтому любые функции B
игнорируются во время поиска. То же самое касается
class A a;
куда A
не может назвать функцию.