#include #include #include namespace { using namespace clice; std::vector compileArgs = { "clang++", "-std=c++20", "main.cpp", "-resource-dir", "/home/ykiko/C++/clice2/build/lib/clang/20", }; struct Visitor : public clang::RecursiveASTVisitor { clang::QualType result; std::unique_ptr parsedAST; Visitor(const char* code) : parsedAST(ParsedAST::build("main.cpp", code, compileArgs)) {} bool VisitTypeAliasDecl(clang::TypeAliasDecl* decl) { if(decl->getName() == "result") { TemplateResolver resolver(parsedAST->sema); result = resolver.resolve(decl->getUnderlyingType()); result.dump(); } return true; } clang::QualType test() { clang::TypeLocBuilder builder; auto decl = parsedAST->context.getTranslationUnitDecl(); TraverseDecl(decl); return result; } }; TEST(Transform, test) { const char* code = R"( template struct type_list {}; template struct A { using type = type_list; }; template > struct test { using base = A; using result = typename base::type; }; )"; Visitor visitor(code); auto result = visitor.test(); } } // namespace