О clang AST и odr-использовании деструкторовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 О clang AST и odr-использовании деструкторов

Сообщение Anonymous »


Для следующего кода

struct X { интервал а; }; интервал основной() { Х х; вернуть 0; } CLang AST не отображает DestructorDecl:

CXXRecordDecl 0x55a415f54f00 line:1:8 ссылается на определение структуры X |-DefinitionData pass_in_registers агрегирует стандартный_макет тривиально_копируемый тривиальный литерал модуля | |-DefaultConstructor существует тривиально | |-CopyConstructor простой тривиальный has_const_param implicit_has_const_param | |-MoveConstructor существует простой и тривиальный | |-CopyAssignment простой тривиальный has_const_param нужен_имплицит неявный_has_const_param | |-MoveAssignment существует простые тривиальные потребности_имплицит | `-Деструктор простой нерелевантный тривиальный нужен_имплицит |-CXXRecordDecl 0x55a415f55018 col:8 неявная структура X |-FieldDecl 0x55a415f550c0 столбец:7 a 'int' |-CXXConstructorDecl 0x55a415f55320 col:8 неявно используется X 'void () noException' встроенный по умолчанию тривиальный | `-CompoundStmt 0x55a415f557d8 |-CXXConstructorDecl 0x55a415f55458 col:8 неявный constexpr X 'void (const X &)' встроенный по умолчанию тривиальный noException-unevaluated 0x55a415f55458 | `-ParmVarDecl 0x55a415f55568 col:8 'const X &' `-CXXConstructorDecl 0x55a415f55618 col:8 неявный constexpr X 'void (X &&)' встроенный по умолчанию тривиальный noException-unevaluated 0x55a415f55618 `-ParmVarDecl 0x55a415f55728 col:8 'X &&' Я пытался получить CXXRecordDecl из struct X и обнаружил, что decl->getDestructor() возвращает nullptr >.

Это меня немного смущает, поскольку стандарт гласит, что класс без деструктора, объявленного пользователем, будет иметь деструктор, объявленный неявно, и он будет неявно определен при использовании odr. > Так что же такое деструктор, используемый odr? Используется ли деструктор этого X odr? Или это просто мое непонимание clang AST и поведения clang::CXXRecordDecl::getDestructor?

Обратите внимание, что clang-AST, напротив, показывает, что конструктор по умолчанию X определен, хотя он ничего не делает.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»