25 Сентября
Внутреннее представление ссылок
Стандарт (от 1998) говорит следующее:
8.3.2.1... Note: a reference can be thought of as a name of an object.
...
8.3.2.3 It is unspecified whether or not a reference requires storage (3.7).
Таким образом, важна лишь семантика ссылок, как объектов, которые представляют собой альтернативное имя для некоторого другого объекта. Как будет представленна ссылка компилятором полностью зависит от реализации.
Ссылка на ссылку
Там же:
8.3.2.4 There shall be no references to references, no arrays of references, and no pointers to references.
Безымянные структуры
Действительно, C++ позволяет объявлять безымянные структуры и классы (9.1):
class-specifier:
class-head { member-specificationopt }
class-head:
class-key identifieropt base-clauseopt
class-key nested-name-specifier identifier base-clauseopt
class-key nested-name-specifieropt template-id base-clauseopt
class-key:
Соответственно, следующий код совершенно корректен:
typedef struct { int i; } S;
Впрочем, анонимные типы, точно так же должны подчиняться правилу одного определения, поэтому следующий код компилироваться
не будет:
struct { int i; } s1;
struct { int i; } s2;
s1 = s2;