1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -Wall -verify %s
2090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson
3090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlssontemplate<typename T> struct A {
49db7dbb918ca49f4ee6c181e4917e7b6ec547353Douglas Gregor  A() : a(1) { } // expected-error{{cannot initialize a member subobject of type 'void *' with an rvalue of type 'int'}}
5090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson
6090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson  T a;
7090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson};
8090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson
9090253155017b7eec031bbd7bf07824a448e1d7aAnders CarlssonA<int> a0;
10090253155017b7eec031bbd7bf07824a448e1d7aAnders CarlssonA<void*> a1; // expected-note{{in instantiation of member function 'A<void *>::A' requested here}}
11090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson
12090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlssontemplate<typename T> struct B {
13d6ca8da0f5a4115813055729faaa5128e994806dJohn McCall  B() : b(1), // expected-warning {{field 'b' will be initialized after field 'a'}}
14d6ca8da0f5a4115813055729faaa5128e994806dJohn McCall    a(2) { }
15090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson
16090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson  int a;
17090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson  int b;
18090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson};
19090253155017b7eec031bbd7bf07824a448e1d7aAnders Carlsson
20bcc12fdaa7b3276b46c8e1349d5c99fd42d6a0a1Anders CarlssonB<int> b0; // expected-note {{in instantiation of member function 'B<int>::B' requested here}}
21c5573a81a83c4173c92c7e91b01371b7223d88c4Eli Friedman
22c5573a81a83c4173c92c7e91b01371b7223d88c4Eli Friedmantemplate <class T> struct AA { AA(int); };
23c5573a81a83c4173c92c7e91b01371b7223d88c4Eli Friedmantemplate <class T> class BB : public AA<T> {
247002f4c03c2d0544f4e8bea8d3a5636519081e35John McCallpublic:
25c5573a81a83c4173c92c7e91b01371b7223d88c4Eli Friedman  BB() : AA<T>(1) {}
26c5573a81a83c4173c92c7e91b01371b7223d88c4Eli Friedman};
27c5573a81a83c4173c92c7e91b01371b7223d88c4Eli FriedmanBB<int> x;
28cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smith
29cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smithstruct X {
30cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smith  X();
31cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smith};
32cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smithtemplate<typename T>
33cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smithstruct Y {
34cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smith  Y() : x() {}
35cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smith  X x;
36cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard Smith};
37cd6d5f43908cb4c2cbd644c35b6f21e9ade9a697Richard SmithY<int> y;
385cf1589db395371975bd3315b9126eb5c9be6701Richard Smith
395cf1589db395371975bd3315b9126eb5c9be6701Richard Smithtemplate<typename T> struct Array {
405cf1589db395371975bd3315b9126eb5c9be6701Richard Smith  int a[3];
415cf1589db395371975bd3315b9126eb5c9be6701Richard Smith  Array() : a() {}
425cf1589db395371975bd3315b9126eb5c9be6701Richard Smith};
435cf1589db395371975bd3315b9126eb5c9be6701Richard SmithArray<int> s;
44