Я только что узнал, что следующий код не является допустимым C++ (не разобрать на int
после ~
):Можно ли вызвать деструктор на int32_t?
int x = 5;
x.~int();
Однако, следующий фрагмент кода делает работу:
int32_t x = 5;
x.~int32_t();
Это связано с тем, что int32_t
является typedef
в моей конкретной реализации C++, и деструктор, по-видимому, может быть вызван любым типептическим типом.
Мой вопрос: является ли любая реализация C++ необходимой для компиляции второго файла? В частности, есть int32_t
, гарантированный typedef, и является ли компилятор обязательным для уничтожения typedef, если он знает, что typedef typedefs что-то int?
Да. 'int32_t' не является встроенным типом, и он не может быть макросом. –
@ Cheersandhth.-Alf В стандартном проекте C++ 14 указывается тип typedef integer type int32_t; 'как определение' int32_t'. Насколько я могу судить, это не оставляет много места для пользовательских типов и всего или даже макроса. – Downvoter
Чтобы избежать близкого вопроса/открытой войны вопроса, я не собираюсь голосовать, чтобы закрыть ее как дубликат, НО ... это дубликат связанного вопроса. Просто потому, что в этом другом вопросе не упоминается 'int32_t', это не означает, что этот другой вопрос не отвечает на ваши вопросы. –