#6 really got me (won't spoil it for anyone, but): is this the same reason arr[n] and [arr]n are the same in C? The {square,curly} braces are just sugar?
I don't think it's the same. arr[n] and [arr]n works because brackets simply expand to * (arr + n) in the first case, * (n + arr) in the second.
C++ dictates if a statement can be interpreted as a declaration, it will be (see "The most vexing parse"). Universal initialization was introduced to provide another way to ensure this doesn't happen.