1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2
3// Make sure we don't run off the end of the stream when parsing a deferred
4// initializer.
5int a; // expected-note {{previous}}
6struct S {
7  int n = 4 + ; // expected-error {{expected expression}}
8} a; // expected-error {{redefinition}}
9
10// Make sure we use all of the tokens.
11struct T {
12  int a = 1 // expected-error {{expected ';' at end of declaration list}}
13  int b = 2;
14  int c = b; // expected-error {{undeclared identifier}}
15};
16
17// Test recovery for bad constructor initializers
18
19struct R1 {
20  int a;
21  R1() : a {}
22}; // expected-error {{expected '{' or ','}}
23
24// Test correct parsing.
25
26struct V1 {
27  int a, b;
28  V1() : a(), b{} {}
29};
30
31template <typename, typename> struct T1 { enum {V};};
32template <int, int> struct T2 { enum {V};};
33struct A {
34  T1<int, int> a1 = T1<int, int>(), *a2 = new T1<int,int>;
35  T2<0,0> b1 = T2<0,0>(), b2 = T2<0,0>(), b3;
36  bool c1 = 1 < 2, c2 = 2 < 1, c3 = false;
37  bool d1 = T1<int, T1<int, int>>::V < 3, d2;
38  T1<int, int()> e = T1<int, int()>();
39};
40
41struct PR19993 {
42  static int n = delete; // expected-error {{only functions can have deleted definitions}}
43};
44