1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
3 // A default template-argument may be specified for any kind of
4 // template-parameter that is not a template parameter pack.
5 template<typename
...Types
= int> // expected-error{{template parameter pack cannot have a default argument}}
8 template<int ...Values
= 0> // expected-error{{template parameter pack cannot have a default argument}}
11 template<typename T
> struct vector
;
13 template<template<class> class ...Templates
= vector
> // expected-error{{template parameter pack cannot have a default argument}}
17 template<typename T
= int> // expected-error{{default template argument not permitted on a friend template}}
20 template<typename T
= int>
27 struct A0
{ template<typename U
> struct B
; };
28 template<typename U
= int> struct A0::B
{ };
31 template<typename T
> struct A1
{ template<typename U
> struct B
; };
32 template<typename T
> template<typename U
= int> struct A1
<T
>::B
{ }; // expected-error{{cannot add a default template argument to the definition of a member of a class template}}
38 template<typename U
> void f1();
41 template<typename T
= int> void X2
<T
>::f0() { } // expected-error{{cannot add a default template argument to the definition of a member of a class template}}
42 template<typename T
> template<typename U
= int> void X2
<T
>::f1() { } // expected-error{{cannot add a default template argument to the definition of a member of a class template}}
45 template<typename T
> struct X3
;
46 template<typename T
> void f2();
49 // Okay; not class members.
50 template<typename T
= int> struct Inner::X3
{ };
51 template<typename T
= int> void Inner::f2() {}
55 template<typename T
, T a
, T b
=0, T c
=1>
59 f
<unsigned int, 0>(0);