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