Для point of declaration имени ставится сразу после его завершения declarator и перед initializer(если есть), за исключением случаев, указанных ниже. [ Example:
unsigned char x = 12; { unsigned char x = x; }
Здесь второй x инициализируется своим (неопределенным) значением. ] — end example
[ Имя из внешней области видимости остается видимым до момента объявления имени, которое его скрывает. [ Note: Example:
const int i = 2; { int i[i]; }
объявляет массив из двух целых чисел в области видимости блока. ] ] — end example — end note
Точка объявления для класса или шаблона класса, сначала объявленного a, class-specifierнаходится сразу после identifierили simple-template-id(если есть) в его class-head. Точка объявления для перечисления находится сразу после identifier(если есть) либо в его, enum-specifierлибо в его первом opaque-enum-declaration, в зависимости от того, что наступит раньше. Точка объявления псевдонима или шаблона псевдонима следует сразу за тем, type-idна который ссылается псевдоним.
Точка объявления using-declarator, которая не называет конструктор, находится сразу после using-declarator.
Точка объявления перечислителя находится сразу после его enumerator-definition. [ Example:
const int x = 12; { enum { x = x }; }
Здесь перечислитель x инициализируется значением константы x, а именно 12. ] — end example
После точки объявления члена класса имя члена можно искать в области его класса. [ Это верно, даже если класс является неполным. Например, Note:
struct X {
enum E { z = 16 };
int b[X::z]; // OK
};
— end note ]
Точка объявления класса, впервые объявленного в файле, elaborated-type-specifierвыглядит следующим образом:
для объявления формы
class-key attribute-specifier-seqopt identifier ;
identifierобъявляется быть class-nameв объеме , который содержит объявление, в противном случае
для elaborated-type-specifierформы
class-key identifier
если elaborated-type-specifierиспользуется в decl-specifier-seqили parameter-declaration-clause функции, определенной в области пространства имен, identifierобъявляется как class-nameв пространстве имен, содержащем объявление; в противном случае, за исключением объявления друга, объект identifierобъявляется в наименьшем пространстве имен или области блока, который содержит объявление. [ Note: Эти правила также применяются в шаблонах. ] [ Другие формы не объявляют новое имя и, следовательно, должны ссылаться на существующее . Смотрите и . ] — end note Note: elaborated-type-specifiertype-name [basic.lookup.elab] [dcl.type.elab] — end note
Точка объявления для an injected-class-name следует сразу за открывающей скобкой определения класса.
Точка объявления для локальной предопределенной переменной ([dcl.fct.def]) находится непосредственно перед function-bodyопределением функции.
Точка объявления параметра шаблона - сразу после его завершения template-parameter. [ Example:
typedef unsigned char T; template<class T = T // lookup finds the typedef name of unsigned char , T // lookup finds the template parameter N = 0> struct A { };
— end example ]
[ Note: Дружественные объявления относятся к функциям или классам, которые являются членами ближайшего включающего пространства имен, но они не вводят новые имена в это пространство имен ([namespace.memdef]). Объявления функций в области видимости блока и объявления переменных со extern спецификатором в области видимости блока относятся к объявлениям, которые являются членами включающего пространства имен, но они не вводят новые имена в эту область. ] — end note