1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3template<typename T> struct A {}; 4 5// Check for template argument lists followed by junk 6// FIXME: The diagnostics here aren't great... 7A<int+> int x; // expected-error {{expected '>'}} expected-error {{expected unqualified-id}} 8A<int x; // expected-error {{expected '>'}} 9 10// PR8912 11template <bool> struct S {}; 12S<bool(2 > 1)> s; 13 14// Test behavior when a template-id is ended by a token which starts with '>'. 15namespace greatergreater { 16 template<typename T> struct S { S(); S(T); }; 17 void f(S<int>=0); // expected-error {{a space is required between a right angle bracket and an equals sign (use '> =')}} 18 void f(S<S<int>>=S<int>()); // expected-error {{use '> >'}} expected-error {{use '> ='}} 19 template<typename T> void t(); 20 void g() { 21 void (*p)() = &t<int>; 22 (void)(&t<int>==p); // expected-error {{use '> ='}} 23 (void)(&t<int>>=p); // expected-error {{use '> >'}} 24 (void)(&t<S<int>>>=p); // expected-error {{use '> >'}} 25 (void)(&t<S<int>>==p); // expected-error {{use '> >'}} expected-error {{use '> ='}} 26 } 27} 28 29namespace PR5925 { 30 template <typename x> 31 class foo { // expected-note {{here}} 32 }; 33 void bar(foo *X) { // expected-error {{requires template arguments}} 34 } 35} 36 37namespace PR13210 { 38 template <class T> 39 class C {}; // expected-note {{here}} 40 41 void f() { 42 new C(); // expected-error {{requires template arguments}} 43 } 44} 45