Home | History | Annotate | Download | only in Parser
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 template<typename T> struct A {};
      4 
      5 // Check for template argument lists followed by junk
      6 // FIXME: The diagnostics here aren't great...
      7 A<int+> int x; // expected-error {{expected '>'}} expected-error {{expected unqualified-id}}
      8 A<int x; // expected-error {{expected '>'}}
      9 
     10 // PR8912
     11 template <bool> struct S {};
     12 S<bool(2 > 1)> s;
     13 
     14 // Test behavior when a template-id is ended by a token which starts with '>'.
     15 namespace 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 
     29 namespace 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 
     37 namespace 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