diff options
Diffstat (limited to 'clang/test/SemaTemplate')
4 files changed, 25 insertions, 2 deletions
diff --git a/clang/test/SemaTemplate/default-arguments.cpp b/clang/test/SemaTemplate/default-arguments.cpp index 8352afdb0dc..e1999218dd0 100644 --- a/clang/test/SemaTemplate/default-arguments.cpp +++ b/clang/test/SemaTemplate/default-arguments.cpp @@ -107,3 +107,14 @@ template<typename T, template<typename> class X = T::template apply> struct X4; int array4[is_same<X4<add_pointer>, X4<add_pointer, add_pointer::apply> >::value? 1 : -1]; + +template<int> struct X5 {}; // expected-note{{has a different type 'int'}} +template<long> struct X5b {}; +template<typename T, + template<T> class B = X5> // expected-error{{template template argument has different}} \ + // expected-note{{previous non-type template parameter}} + struct X6 {}; + +X6<int> x6a; +X6<long> x6b; +X6<long, X5b> x6c; diff --git a/clang/test/SemaTemplate/instantiate-template-template-parm.cpp b/clang/test/SemaTemplate/instantiate-template-template-parm.cpp index b158251915a..00b2c0ecc2f 100644 --- a/clang/test/SemaTemplate/instantiate-template-template-parm.cpp +++ b/clang/test/SemaTemplate/instantiate-template-template-parm.cpp @@ -19,3 +19,15 @@ int i; apply<add_pointer, int>::type ip = &i; apply<add_reference, int>::type ir = i; apply<add_reference, float>::type fr = i; // expected-error{{non-const lvalue reference to type 'float' cannot be initialized with a value of type 'int'}} + +// Template template parameters +template<int> struct B; // expected-note{{has a different type 'int'}} + +template<typename T, + template<T Value> class X> // expected-error{{cannot have type 'float'}} \ + // expected-note{{with type 'long'}} +struct X0 { }; + +X0<int, B> x0b1; +X0<float, B> x0b2; // expected-note{{while substituting}} +X0<long, B> x0b3; // expected-error{{template template argument has different template parameters}} diff --git a/clang/test/SemaTemplate/instantiation-default-2.cpp b/clang/test/SemaTemplate/instantiation-default-2.cpp index 740832c5ba3..4d9a0e2717b 100644 --- a/clang/test/SemaTemplate/instantiation-default-2.cpp +++ b/clang/test/SemaTemplate/instantiation-default-2.cpp @@ -15,4 +15,4 @@ Constant<float (*)(int, double), &f> *c5; Constant<float (*)(int, int), f> *c6; // expected-error{{non-type template argument of type 'float (*)(int, double)' cannot be converted to a value of type 'float (*)(int, int)'}} -Constant<float, 0> *c7; // expected-note{{in instantiation of default argument for 'Constant<float>' required here}} +Constant<float, 0> *c7; // expected-note{{while substituting}} diff --git a/clang/test/SemaTemplate/nested-template.cpp b/clang/test/SemaTemplate/nested-template.cpp index 849d835541f..e18329c145d 100644 --- a/clang/test/SemaTemplate/nested-template.cpp +++ b/clang/test/SemaTemplate/nested-template.cpp @@ -122,7 +122,7 @@ template<typename T, struct X2_arg; X2<int>::Inner<X2_arg> x2i1; -X2<float>::Inner<X2_arg> x2i2; // expected-note{{instantiation}} +X2<float> x2a; // expected-note{{instantiation}} X2<long>::Inner<X2_arg> x2i3; // expected-error{{template template argument has different}} |

