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

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

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) будет набор всех объявлений
м в х
и встроенный набор пространств имен X (7.3.1). Если S (X, m)
не пустой, S (X, m) есть S (X, m); в противном случае S (X, m) является объединением
S (Ni, m) для всех пространств имен Ni, назначенных директивами использования в 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.

0

Другие решения


По вопросам рекламы [email protected]