add dealias for Resolver.
This commit is contained in:
@@ -97,7 +97,6 @@ template <typename X>
|
||||
struct test {
|
||||
using result = typename C<X>::type;
|
||||
};
|
||||
|
||||
)";
|
||||
Visitor visitor(code);
|
||||
clang::QualType result = visitor.test();
|
||||
@@ -129,7 +128,6 @@ template <typename X>
|
||||
struct test {
|
||||
using result = typename A<X>::self::self::self::self::self::type;
|
||||
};
|
||||
|
||||
)";
|
||||
Visitor visitor(code);
|
||||
clang::QualType result = visitor.test();
|
||||
@@ -146,5 +144,41 @@ struct test {
|
||||
ASSERT_EQ(T->getDecl()->getName(), "X");
|
||||
}
|
||||
|
||||
TEST(DependentNameResolver, alias_dependent_name) {
|
||||
const char* code = R"(
|
||||
template <typename ...Ts>
|
||||
struct type_list {};
|
||||
|
||||
template <typename T1>
|
||||
struct A {
|
||||
using type = type_list<T1>;
|
||||
};
|
||||
|
||||
template <typename T2>
|
||||
struct B {
|
||||
using base = A<T2>;
|
||||
using type = typename base::type;
|
||||
};
|
||||
|
||||
template <typename X>
|
||||
struct test {
|
||||
using result = typename B<X>::type;
|
||||
};
|
||||
)";
|
||||
Visitor visitor(code);
|
||||
clang::QualType result = visitor.test();
|
||||
// result->dump();
|
||||
auto TST = result->getAs<clang::TemplateSpecializationType>();
|
||||
ASSERT_TRUE(TST);
|
||||
ASSERT_EQ(TST->getTemplateName().getAsTemplateDecl()->getName(), "type_list");
|
||||
|
||||
auto args = TST->template_arguments();
|
||||
ASSERT_EQ(args.size(), 1);
|
||||
|
||||
auto T = llvm::dyn_cast<clang::TemplateTypeParmType>(args[0].getAsType());
|
||||
ASSERT_TRUE(T);
|
||||
ASSERT_EQ(T->getDecl()->getName(), "X");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
Reference in New Issue
Block a user