p11-0x.cpp revision 1ed64765624d6f5226dd213e220e038b459972d1
1// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s 2 3// If a template-parameter of a class template has a default 4// template-argument, each subsequent template-parameter shall either 5// have a default template-argument supplied or be a template 6// parameter pack. 7template<typename> struct vector; 8 9template<typename T = int, typename ...Types> struct X2t; 10template<int V = 0, int ...Values> struct X2nt; 11template<template<class> class M = vector, template<class> class... Metas> 12 struct X2tt; 13 14// If a template-parameter of a primary class template is a template 15// parameter pack, it shall be the last template-parameter . 16template<typename ...Types, // expected-error{{template parameter pack must be the last template parameter}} 17 int After> 18struct X0t; 19 20template<int ...Values, // expected-error{{template parameter pack must be the last template parameter}} 21 int After> 22struct X0nt; 23 24template<template<typename> class ...Templates, // expected-error{{template parameter pack must be the last template parameter}} 25 int After> 26struct X0tt; 27 28// [ Note: These are not requirements for function templates or class 29// template partial specializations because template arguments can be 30// deduced (14.8.2). -- end note] 31template<typename... Types> struct X1t; 32template<typename ...Types, typename T> struct X1t<T, Types...> { }; 33 34template<int... Values> struct X1nt; 35template<int ...Values, int V> struct X1nt<V, Values...> { }; 36 37// FIXME: Need template template argument packs! 38// template<template<int> class... Meta> struct X1tt; 39// template<template<int> class... Meta, template<int> class M> 40// struct X1tt<M, Meta...> { }; 41 42template<typename ...Types, typename T> 43void f1t(X1t<T, Types...>); 44 45template<int ...Values, int V> 46void f1nt(X1nt<V, Values...>); 47 48// FIXME: Need template template argument packs! 49// template<template<int> class... Meta, template<int> class M> 50// void f1tt(X1tt<M, Meta...>); 51