aboutsummaryrefslogtreecommitdiff
path: root/test/CXX/temp/temp.param/p2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CXX/temp/temp.param/p2.cpp')
-rw-r--r--test/CXX/temp/temp.param/p2.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/test/CXX/temp/temp.param/p2.cpp b/test/CXX/temp/temp.param/p2.cpp
index 656bd26ff08d..c70b1d354f7c 100644
--- a/test/CXX/temp/temp.param/p2.cpp
+++ b/test/CXX/temp/temp.param/p2.cpp
@@ -8,14 +8,17 @@
template<class T> struct X;
template<typename T> struct X;
-// typename followed by aqualified-id denotes the type in a non-type
+// typename followed by a qualified-id denotes the type in a non-type
// parameter-declaration.
template<typename T, typename T::type Value> struct Y0;
template<typename T, typename X<T>::type Value> struct Y1;
+template<typename T typename U> struct Y2; // expected-error{{expected ',' or '>'}}
+template<typename T U> struct Y3; // expected-error{{expected a qualified name after 'typename'}} expected-error{{expected ',' or '>'}}
+template<typedef T typename U> struct Y4; // expected-error{{expected template parameter}} expected-note {{did you mean to use 'typename'?}} expected-error{{expected ',' or '>'}}
// A storage class shall not be specified in a template-parameter declaration.
template<static int Value> struct Z; //expected-error{{invalid declaration specifier}}
-template<typedef int Value> struct Z0; //expected-error{{expected template parameter}} expected-error{{expected identifier}} expected-error{{extraneous 'template<>' in declaration of struct 'Z0'}} expected-note{{did you mean to use 'typename'?}}
+template<typedef int Value> struct Z0; //expected-error{{invalid declaration specifier}}
template<extern inline int Value> struct Z1; //expected-error2{{invalid declaration specifier}}
template<virtual int Value> struct Z2; //expected-error{{invalid declaration specifier}}
template<explicit int Value> struct Z3; //expected-error{{invalid declaration specifier}}
@@ -43,6 +46,6 @@ template<auto> struct Z13; // OK
// Make sure that we properly disambiguate non-type template parameters that
// start with 'class'.
class X1 { };
-template<class X1 *xptr> struct Y2 { };
+template<class X1 *xptr> struct X2 { };
// FIXME: add the example from p2