C++ Standard 8.3.2/4 says:
There shall be no references to references, no arrays of references, and no pointers to references.
A reference cannot be reassigned, and has no size.
If arrays of references were allowed they would therefore have to be treated in a special way then.
This is what i read at:
5.2.1 Subscripting [expr.sub]
1 A postfix expression followed by an expression in square brackets is a postfix expression. One of the expressions shall have the type “pointer to T and the other shall have enumeration or integral type. The result is an lvalue of type “T.” The type “T” shall be a completely-defined object type.61) The expression E1[E2] is identical (by definition) to *((E1)+(E2)) [ Note: see 5.3 and 5.7 for details of * and + and 8.3.4 for details of arrays. —end note ]
-C++ Draft.
int a = 10, b = 20;
int &c[] = {a, b};
So imagine &c[0]
would be something like *&(c+0)
, IMHO references are like aliases. Hence going by the notion of arrays it would try to dereference the value held by the reference which one would not want.
Because references aren't objects. References were primarily introduced to support call by reference and return by reference without inserting &
at call-site. What you probably want is an array of pointers.
Because indexation into an array is actually defined in terms of an implicit conversion to a pointer, then pointer arithmetic. So to support this, you'd have to also support pointers to references, and define what pointer arithmetic means on them.