Квалифицированный поиск имени в имени

Я хочу понять правило поиска имен, уточненных в пространстве имен. Я пытаюсь сделать это на примере:

namespace A
{
    int a=::b; //error: ‘::b’ has not been declared
}
int b=6;

Есть цитата, на которую я опираюсь в своих рассуждениях (3.4.3.2/2 N3797):

Для пространства имен X и имени m заданный для поиска в пространстве имен набор поиска S (X, m) определяется следующим образом: пусть S (X, m) будет набором всех объявлений m в X и встроенным набором пространства имен X (7.3.1). Если S (X, m) не пусто, то S (X, m) есть S (X, m); в противном случае S (X, m) является объединением S(Ni, m) для всех пространств имен Ni, назначенных с помощью директив using в X и его встроенном наборе пространств имен.

Позволять X быть глобальным охватом. У нас есть это S(X,b)={int b=6}, Это подразумевает, что поиск имени должен быть успешным. Но на самом деле программа плохо сформирована. Могу ли я правильно понять это правило?

1 ответ

b находится в глобальной области видимости, но он должен быть объявлен до того, где вы его используете. лайк

int b=6;
namespace A
{
    int a=::b; 
}

(N 3690 Draft) 3.4.1 Unqualified name lookup 4. A name used in global scope, outside of any function, class or user-declared namespace, shall be declared before its use in global scope.

Другие вопросы по тегам