brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · a148ee4 Raw
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