template<typename T1> class TestClassTemplatePartial<T1, A> {\r
int j;\r
};\r
+\r
+ template<typename T = int> struct TestTemplateDefaultType;\r
+ template<typename T> struct TestTemplateDefaultType { };\r
+\r
+ template<int I = 42> struct TestTemplateDefaultNonType;\r
+ template<int I> struct TestTemplateDefaultNonType { };\r
+\r
+ template<template<typename> class TT = TestClassTemplate> struct TestTemplateTemplateDefaultType;\r
+ template<template<typename> class TT> struct TestTemplateTemplateDefaultType { };\r
}\r
// CHECK: ClassTemplateDecl{{.*}} TestClassTemplate\r
// CHECK-NEXT: TemplateTypeParmDecl\r
// CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplatePartial\r
// CHECK-NEXT: FieldDecl{{.*}} j\r
\r
+// CHECK: ClassTemplateDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} {{.*}} TestTemplateDefaultType\r
+// CHECK-NEXT: TemplateTypeParmDecl\r
+// CHECK-NEXT: TemplateArgument type 'int'\r
+// CHECK-NEXT: inherited from TemplateTypeParm 0x{{[^ ]*}} 'T'\r
+\r
+// CHECK: ClassTemplateDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} {{.*}} TestTemplateDefaultNonType\r
+// CHECK-NEXT: NonTypeTemplateParmDecl\r
+// CHECK-NEXT: TemplateArgument expr\r
+// CHECK-NEXT: ConstantExpr\r
+// CHECK-NEXT: IntegerLiteral\r
+// CHECK-NEXT: inherited from NonTypeTemplateParm 0x{{[^ ]*}} 'I' 'int'\r
+\r
+// CHECK: ClassTemplateDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} {{.*}} TestTemplateTemplateDefaultType\r
+// CHECK-NEXT: TemplateTemplateParmDecl\r
+// CHECK-NEXT: TemplateTypeParmDecl\r
+// CHECK-NEXT: TemplateArgument\r
+// CHECK-NEXT: inherited from TemplateTemplateParm 0x{{[^ ]*}} 'TT'\r
+\r
// PR15220 dump instantiation only once\r
namespace testCanonicalTemplate {\r
class A {};\r