Počkat, staticky ověřovat dimenzi snad v C++ (a Rustu) jde, pomocí skalárních typových argumentů (v Rustu "const generics", stále dosti experimentální fíčura, ale to je principielně jedno).
Const generics vyžadují hodnotu známou v době překladu (pro méně nechápavé to mají přímo v názvu). Jazyky se silnějšími typovými systémy toto omezení nemají (silnější = méně primitivní, ovšem jde to vyjádřit i matematicky, zná-li člověk formální aparát).
Ano, proto jsem psal
staticky ověřovat. Co se týče te dynamické stránky, jazyky jako Rust nebo C++ tohle mít nemůžou nejen kvůli omezeném typového systému, ale především proto, že to vyžaduje poměrně silný runtime. Rust tohle řeší pomocí DSTs, což je způsob, jak to udělat s tenkým runtime.
To je tvůj problém. Hierarchie sofistikovaných typových systémů (pořadí podle formální síly) je “no sophistication < HKT < GADT < DP”. Rust nemá ani HKT, je v té hierarchii úplně vlevo (ta hierarchie by se dala zjemnit, třeba Julia má sice silnější typový systém než Rust, ale plnohodnotné HKT taky nemá).
To je ale pouze jeden poměrně specifický způsob jak posuzovat "sofistikovanost" a nikde není psáno, že právě tohle je ten jediný správný. Z mého pohledu typový systém Haskellu (apod.) je méně sofistikovaný, protože má horší poměr abstrakce / (výkon + korektnost) - používá komplexnější abstrakce, ale nedokáže s nimi doručit lepší vlastnosti než Rust. Navrhnout abstrakce a typový systém tak, aby poskytoval korektnost a zároveň byl výkonově transparentní, je o dost těžší než udělat to s GC a runtimem (ie. výsledek je nutně nějakým způsobem sofistikovanější).
Proto jsem zmiňoval ten borrowing, což je jedna z fíčur, díky které je tohle možné. Jsem zvyklý, že typoví teoretici si Rust ještě úplně nedokázali zaškatulkovat, ale že někdo úplně popře, že by borrowing byl fíčura typového systému, to je jinej level