Toate structurile transmise prin valoare sunt copiate.
Daca iti definesti tipul asa, nu ti-ar mai trebui referinta:
typedef int[...][...] Matrice;
Dar atunci nu ai mai putea intoarce dimensiunile.
Poti sa faci putina magie cu C++11 si sa iti definesti o matrice asa(si nu ai mai avea nevoie de referinta de la matrice):
typedef pair<reference_wrapper<size_t> , reference_wrapper<size_t> > Dimensiuni;
typedef pair<Dimensiuni, int**> Matrice;
Dar dupa cum observi s-ar complica cu mult lucrurile