105 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3template<typename T>4struct X {5 int x;6 T y; // expected-error{{data member instantiated with function type}}7 T* z;8 T bitfield : 12; // expected-error{{bit-field 'bitfield' has non-integral type 'float'}} \9 // expected-error{{data member instantiated with function type}}10 11 mutable T x2; // expected-error{{data member instantiated with function type}}12};13 14void test1(const X<int> *xi) {15 int i1 = xi->x;16 const int &i2 = xi->y;17 int* ip1 = xi->z;18 int i3 = xi->bitfield;19 xi->x2 = 17;20}21 22void test2(const X<float> *xf) {23 (void)xf->x; // expected-note{{in instantiation of template class 'X<float>' requested here}}24}25 26void test3(const X<int(int)> *xf) {27 (void)xf->x; // expected-note{{in instantiation of template class 'X<int (int)>' requested here}}28}29 30namespace PR7123 {31 template <class > struct requirement_;32 33 template <void(*)()> struct instantiate34 { };35 36 template <class > struct requirement ;37 struct failed ;38 39 template <class Model> struct requirement<failed *Model::*>40 {41 static void failed()42 {43 ((Model*)0)->~Model(); // expected-note{{in instantiation of}}44 }45 };46 47 template <class Model> struct requirement_<void(*)(Model)> : requirement<failed *Model::*>48 { };49 50 template <int> struct Requires_51 { typedef void type; };52 53 template <class Model> struct usage_requirements54 {55 ~usage_requirements()56 {((Model*)0)->~Model(); } // expected-note{{in instantiation of}}57 };58 59 template < typename TT > struct BidirectionalIterator60 {61 enum62 { value = 0 };63 64 instantiate< requirement_<void(*)(usage_requirements<BidirectionalIterator>)>::failed> int534; // expected-note{{in instantiation of}}65 66 ~BidirectionalIterator()67 { i--; } // expected-error{{cannot decrement value of type 'PR7123::X'}}68 69 TT i;70 };71 72 struct X73 { };74 75 template<typename RanIter> 76 typename Requires_< BidirectionalIterator<RanIter>::value >::type sort(RanIter,RanIter){}77 78 void f()79 {80 X x;81 sort(x,x);82 }83}84 85namespace PR7355 {86 template<typename T1> class A {87 class D; // expected-note{{declared here}}88 D d; //expected-error{{implicit instantiation of undefined member 'PR7355::A<int>::D'}}89 };90 91 A<int> ai; // expected-note{{in instantiation of}}92}93 94namespace PR8712 {95 template <int dim>96 class B {97 public:98 B(const unsigned char i);99 unsigned char value : (dim > 0 ? dim : 1);100 };101 102 template <int dim>103 inline B<dim>::B(const unsigned char i) : value(i) {}104}105