Следующее определение пространства имен не компилируется, когда первое объявление закомментировано. Если первое объявление foo
не закомментировано, то оно прекрасно компилируется.
namespace Y
{
//void foo();
void ::Y::foo(){}
}
В соответствующей части стандарта (§8.3¶1) говорится:
Когда declarator-id квалифицирован, объявление должно ссылаться на ранее объявленный член
Я понимаю, что это правило предотвращает введение имен в другие пространства имен. Интересно, можно ли смягчить это правило, чтобы разрешить qualified-id ссылаться на текущее пространство имен.