union
, enum
и struct
(и я полагаю, class
тоже) вместе имеет раздельное «имя ведро» (не имеет ничего общего с пространствами имен C++!) Из обычных идентификаторов. Это становится ясным в C, потому что вы должны префикс имен с struct
и т.д.
У меня нет его на C++, но это от стандарта C:
6.2.3 Name spaces of identifiers
If more than one declaration of a particular identifier is visible at
any point in a translation unit, the syntactic context disambiguates uses
that refer to different entities.
Thus, there are separate name spaces for various categories of identifiers,
as follows:
— label names (disambiguated by the syntax of the label declaration and use);
— the tags of structures, unions, and enumerations (disambiguated by
following any32) of the keywords struct, union, or enum);
— the members of structures or unions; each structure or union has a
separate name space for its members (disambiguated by the type of the
expression used to access themember via the . or -> operator);
— all other identifiers, called ordinary identifiers (declared in ordinary
declarators or as enumeration constants).
Что вы предлагаете '& x' для пары функций-переменных? – chris