Ответ 1
Существует четкое требование, чтобы int32_t
было typedef. Начнем с [cstdint.syn]/2:
Заголовок определяет все функции, типы и макросы так же, как 7.18 в стандарте C.
Итак, оттуда мы рассмотрим требование для библиотеки C:
имя typedef. intN_t обозначает целочисленный тип со знаком с шириной N, без битов дополнения и представления с двумя плюсами.
[выделено курсивом]
Итак, да, int32_t
должно быть "typedef name".
Хотя (насколько я знаю) он никогда не указывался непосредственно в нормативном тексте, в следующем примечании ясно, что вызов деструктора для typedef, который разрешает встроенный тип, предназначен для компиляции и успешности ([class. dtor]/16):
Примечание. Обозначение для явного вызова деструктора может использоваться для любого имени скалярного типа (5.2.4). Это позволяет писать код, не зная, существует ли деструктор для данного типа. Например,
typedef int I;
I* p;
p->I::~I();