Here is the solution I found:
const uint8_t (*arr[])[3] = {[0]=&(uint8_t[]){1,2,3}}; // correct
const uint8_t (*arr[])[3] = {[0]=&(uint8_t[]){1,2}}; // error
const uint8_t (*arr[])[n] = {[0]=&(uint8_t[]){1,2,3,...,n-1,n}}; // correct
const uint8_t (*arr[])[n] = {[0]=&(uint8_t[]){1,2,3,...,n-1}}; // error
It's not perfect, since it uses an array of pointers.