41 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2template<typename> struct Y1; // expected-note{{template is declared here}}3template<typename, int> struct Y2;4 5// C++ [temp.param]p12:6template<class T1,7 class T2 = int> // expected-note{{previous default template argument defined here}}8 class B3;9template<class T1, typename T2> class B3;10template<class T1,11 typename T2 = float> // expected-error{{template parameter redefines default argument}}12 class B3;13 14template<template<class, int> class,15 template<class> class = Y1> // expected-note{{previous default template argument defined here}}16 class B3t;17 18template<template<class, int> class, template<class> class> class B3t;19 20template<template<class, int> class,21 template<class> class = Y1> // expected-error{{template parameter redefines default argument}}22 class B3t;23 24template<int N,25 int M = 5> // expected-note{{previous default template argument defined here}}26 class B3n;27 28template<int N, int M> class B3n;29 30template<int N,31 int M = 7> // expected-error{{template parameter redefines default argument}}32 class B3n;33 34// Check validity of default arguments35template<template<class, int> class =// expected-note {{previous template template parameter is here}}36 Y1> // expected-error{{too many template arguments for class template 'Y1'}}37 // expected-note@-1 {{template template argument has different template parameters than its corresponding template template parameter}}38 class C1 {};39 40C1<> c1; // expected-note{{while checking a default template argument}}41