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.
class-specifier:
class-head:class-head { member-specificationopt }
class-key:class-key identifieropt base-clauseoptclass-key nested-name-specifier identifier base-clauseopt
class-key nested-name-specifieropt template-id base-clauseopt
classstruct
union
Соответственно, следующий код совершенно корректен:
typedef struct { int i; } S;
Впрочем, анонимные типы, точно так же должны подчиняться правилу одного определения, поэтому следующий код компилироваться не будет:
struct { int i; } s1; struct { int i; } s2; s1 = s2;