1// RUN: %clang_cc1 -fsyntax-only -verify %s 2template<typename> struct Y1; // expected-note{{too few template parameters in template template argument}} 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 arguments 35template<template<class, int> class // expected-note{{previous template template parameter is here}} 36 = Y1> // expected-error{{template template argument has different template parameters than its corresponding template template parameter}} 37 class C1 {}; 38 39C1<> c1; // expected-note{{while checking a default template argument}} 40