1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 template<typename
> struct Y1
; // expected-note{{too few template parameters in template template argument}}
3 template<typename
, int> struct Y2
;
5 // C++ [temp.param]p12:
7 class T2
= int> // expected-note{{previous default template argument defined here}}
9 template<class T1
, typename T2
> class B3
;
11 typename T2
= float> // expected-error{{template parameter redefines default argument}}
14 template<template<class, int> class,
15 template<class> class = Y1
> // expected-note{{previous default template argument defined here}}
18 template<template<class, int> class, template<class> class> class B3t
;
20 template<template<class, int> class,
21 template<class> class = Y1
> // expected-error{{template parameter redefines default argument}}
25 int M
= 5> // expected-note{{previous default template argument defined here}}
28 template<int N
, int M
> class B3n
;
31 int M
= 7> // expected-error{{template parameter redefines default argument}}
34 // Check validity of default arguments
35 template<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}}
39 C1
<> c1
; // expected-note{{while checking a default template argument}}