p12.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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;
  4. // C++ [temp.param]p12:
  5. template<class T1,
  6. class T2 = int> // expected-note{{previous default template argument defined here}}
  7. class B3;
  8. template<class T1, typename T2> class B3;
  9. template<class T1,
  10. typename T2 = float> // expected-error{{template parameter redefines default argument}}
  11. class B3;
  12. template<template<class, int> class,
  13. template<class> class = Y1> // expected-note{{previous default template argument defined here}}
  14. class B3t;
  15. template<template<class, int> class, template<class> class> class B3t;
  16. template<template<class, int> class,
  17. template<class> class = Y1> // expected-error{{template parameter redefines default argument}}
  18. class B3t;
  19. template<int N,
  20. int M = 5> // expected-note{{previous default template argument defined here}}
  21. class B3n;
  22. template<int N, int M> class B3n;
  23. template<int N,
  24. int M = 7> // expected-error{{template parameter redefines default argument}}
  25. class B3n;
  26. // Check validity of default arguments
  27. template<template<class, int> class // expected-note{{previous template template parameter is here}}
  28. = Y1> // expected-error{{template template argument has different template parameters than its corresponding template template parameter}}
  29. class C1 {};
  30. C1<> c1; // expected-note{{while checking a default template argument}}