Почему это ошибка:
typedef int H[4];
H * h = new H; // error: cannot convert 'int*' to 'int (*)[4]' in initialization
?
Кроме того, почему это не ошибка:
H * h = new H[1];
?
Почему компилятор считает, что new H возвращает int *, тогда как new H[1] возвращает H *, как ожидалось?
Иначе говоря: , почему T * t = new T; является правильным для общего типа T, но неверно, когда T является типом массива?
Каким будет канонический способ выделения простого типа массива, например, через new?
Обратите внимание, что это упрощенный пример, так, например, new int[4] не является приемлемым обходным путем - мне нужно использовать фактический тип из предыдущего typedef.
Заметьте также, что я знаю, что использование std::vector, std::array и др. обычно предпочтительнее для массивов в стиле C, но у меня есть "реальный мир", когда мне нужно работать с такими типами, как выше.