Was ich persönlich nicht tun würde, wäre, für Datenstrukturen, welche vom Server kommen (könnten) mit der []- und für reine Client-Datenstrukturen die Punkt-Notation nehmen.
Damit sind "Daten von außen" aber schön als solche getagged.
Dann müsste ich jedesmal, wenn ich irgendwo drauf zugreife, überlegen, wo die Daten herkommen, was auch potentiell fehlerträchtig ist.
Nur wenn man die Daten blind durchreicht: fänd ich auch schlecht.
Bliebe also nur, den von dir genannten Weg zu Ende zu gehen und generell mit der Klammer-Notation zugreifen mit dem Nachteil, dass der Compiler dann wiederum die Namen nicht verkürzen kann und ich weniger Code-Einsparung habe. Ansonsten sehe ich da erstmal keine Nachteile dabei, als Vorteil hätte man, dass man den Kopierkonstruktor nicht mehr braucht.
Die Nachteile wiegen den kleinen Vorteil mehr als auf. Ob in einem Konstruktor oder wo auch immer: Ich würde auch stets bevorzugen, die Daten manuell in ein dem Compiler bekanntes Konstrukt zu kopieren.
Was ich mir erhoffte, war, dass ich dem Compiler sagen kann: aber hier, bei diesem Typedef, da benennst du das Zeugs aber nicht um (also genau das, was die Klammer-Notation erreicht, aber so daß ich bei der Punkt-Notation bleiben kann).
Letztlich macht der Compiler doch eh wieder Punkt-Notation draus ;-) Im Ernst: Wenn Du das wirklich willst, könntest Du ein Objekt als External deklarieren. Die Doku rät davon zu Recht ab, finde ich.