blob: 5479961d563d84a53a09812a845318b73e1e3cb3 [file] [log] [blame]
Eli Friedman64a4eb22009-12-27 22:31:18 +00001// 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}}
John McCall9ba61662010-02-26 08:45:28 +00008A<int x; // expected-error {{expected '>'}}
Eli Friedman64a4eb22009-12-27 22:31:18 +00009
Douglas Gregorbc61bd82011-01-11 00:33:19 +000010// PR8912
11template <bool> struct S {};
12S<bool(2 > 1)> s;
Richard Smith19a27022012-06-18 06:11:04 +000013
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}