From 39fcc9a984e2820e4ea0fa2ac4abd17d9f3a31df Mon Sep 17 00:00:00 2001 From: dim Date: Sun, 20 Feb 2011 13:06:31 +0000 Subject: Vendor import of clang trunk r126079: http://llvm.org/svn/llvm-project/cfe/trunk@126079 --- test/CXX/temp/temp.param/p11-0x.cpp | 61 +++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test/CXX/temp/temp.param/p11-0x.cpp (limited to 'test/CXX/temp/temp.param/p11-0x.cpp') diff --git a/test/CXX/temp/temp.param/p11-0x.cpp b/test/CXX/temp/temp.param/p11-0x.cpp new file mode 100644 index 0000000..0bf4341 --- /dev/null +++ b/test/CXX/temp/temp.param/p11-0x.cpp @@ -0,0 +1,61 @@ +// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s + +// If a template-parameter of a class template has a default +// template-argument, each subsequent template-parameter shall either +// have a default template-argument supplied or be a template +// parameter pack. +template struct vector; + +template struct X2t; +template struct X2nt; +template class M = vector, template class... Metas> + struct X2tt; + +// If a template-parameter of a primary class template is a template +// parameter pack, it shall be the last template-parameter . +template +struct X0t; + +template +struct X0nt; + +template class ...Templates, // expected-error{{template parameter pack must be the last template parameter}} + int After> +struct X0tt; + +// [ Note: These are not requirements for function templates or class +// template partial specializations because template arguments can be +// deduced (14.8.2). -- end note] +template struct X1t; +template struct X1t { }; + +template struct X1nt; +template struct X1nt { }; + +template class... Meta> struct X1tt; +template class... Meta, template class M> + struct X1tt { }; + +template +void f1t(X1t); + +template +void f1nt(X1nt); + +template class... Meta, template class M> +void f1tt(X1tt); + +namespace DefaultTemplateArgsInFunction { + template T &f0(U) { T *x = 0; return *x; } + + void test_f0() { + int &ir0 = f0(3.14159); + int &ir1 = f0(3.14159); + float &fr0 = f0(3.14159); + } + + template<> int &f0(int*); + template int &f0(double&); +} -- cgit v1.1