VC++ non compila, e il primo errore che da è su
void doSomething(unsigned r, unsigned c, int(*matrix)[*]); // error C2059: syntax error: ']'
Mingw 7.2.0 da più o meno gli stessi errori mostrati da IfNotFalseTrue (però io ho tolto la compatibilità C11 C99 e aggiunto quella per il C++17)
Per il resto:
un puntatore a int può puntare a qualsiasi cosa riconducibile a un int;
un puntatore a funzione può puntare a qualsiasi funzione compatibile col puntatore stesso;
se esiste una logica, un puntatore a VLA dovrebbe puntare a qualcosa che sia un VLA, ne convieni?
Devo invece dissentire se dici che il tipo di matrix è forzato ad essere int
int (*allocate(unsigned r, unsigned c))[]
{
return malloc(r * c * sizeof(int));
}
int(*matrix)[c] = allocate(r, c);
Scusa, ma allora quell'int a che serve? A farci stare qualsiasi cosa di 4 byte? Non pensi sia quanto meno ambiguo?
l'unica cosa che posso invitarti a fare è una ricerca su cosa sono i pointer-to-array.
Grazie del consiglio, ma non ne ho bisogno. Tra l'altro gli esempi che trovo nel draft dello standard C++ n4750 usano tutti costanti numeriche, e non variabili il cui valore può essere determinabile dall'utente (e non mi aspettavo niente di diverso).
Tra l'altro ho anche una mezza idea del perché il C++ non ammetta i VLA e riguarda un possibile inlining delle funzioni (con problemi di stack overflow).
Per concludere: non tutto il codice C può essere compilato da un compilatore C++ aderente allo standard.