Получение информации о специальных членах-функциях с помощью libclang

Существует ли способ получить информацию о специальных членах-функциях, которые не были явно определены в классе, с помощью libclang?

Если попробовать получить представление AST напрямую через clang, то в выводе будет требуемая информация. Например, если вызывать clang -Xclang -ast-dump для следующего кода:

class Logger
{
public:
    virtual auto log(const char* message) -> void = 0;
};

, то мы получим следующее AST:

-CXXRecordDecl 0x5596a0595bc0 <logger.hpp:1:1, line:5:1> line:1:7 class Logger definition
  |-DefinitionData polymorphic abstract literal has_constexpr_non_copy_move_ctor can_const_default_init
  | |-DefaultConstructor exists non_trivial constexpr needs_implicit defaulted_is_constexpr
  | |-CopyConstructor simple non_trivial has_const_param needs_implicit implicit_has_const_param
  | |-MoveConstructor exists simple non_trivial needs_implicit
  | |-CopyAssignment simple non_trivial has_const_param implicit_has_const_param
  | |-MoveAssignment exists simple non_trivial
  | `-Destructor simple irrelevant trivial
  |-CXXRecordDecl 0x5596a0595cd8 <col:1, col:7> col:7 implicit class Logger
  |-AccessSpecDecl 0x5596a0595d68 <line:3:1, col:7> col:1 public
  |-CXXMethodDecl 0x5596a0595f08 <line:4:5, col:53> col:18 log 'auto (const char *) -> void' virtual pure
  | `-ParmVarDecl 0x5596a0595da8 <col:22, col:34> col:34 message 'const char *'
  |-CXXMethodDecl 0x5596a0596008 <line:1:7> col:7 implicit constexpr operator= 'Logger &(const Logger &)' inline default noexcept-unevaluated 0x5596a0596008
  | `-ParmVarDecl 0x5596a0596118 <col:7> col:7 'const Logger &'
  |-CXXMethodDecl 0x5596a05961b8 <col:7> col:7 implicit constexpr operator= 'Logger &(Logger &&)' inline default noexcept-unevaluated 0x5596a05961b8
  | `-ParmVarDecl 0x5596a05962c8 <col:7> col:7 'Logger &&'
  `-CXXDestructorDecl 0x5596a0596360 <col:7> col:7 implicit ~Logger 'void ()' inline default trivial noexcept-unevaluated 0x5596a0596360

Нода DefinitionData содержит всю необходимую (для моей задачи) информацию, но по неизвестным мне причинам при обходе дерева с помощью clang_visitChildren ноды данного типа не обрабатываются.


Ответы (0 шт):