G++ currently accepts the following code: char * alloc(unsigned a, unsigned b) { typedef char array[a]; return &**(new array[b]); } Is this intentional? The equivalent "new char[a][b]" is rejected (as required by the C++ standard).