1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4 5 // <rdar://problem/8124080> 6 template<typename _Alloc> class allocator; 7 template<class _CharT> struct char_traits; 8 template<typename _CharT, typename _Traits = char_traits<_CharT>, 9 typename _Alloc = allocator<_CharT> > 10 class basic_string; 11 template<typename _CharT, typename _Traits, typename _Alloc> 12 const typename basic_string<_CharT, _Traits, _Alloc>::size_type 13 basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_max_size // expected-error{{no member named '_Rep' in 'basic_string<_CharT, _Traits, _Alloc>'}} 14 = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; 15 16 // PR7118 17 template<typename T> 18 class Foo { 19 class Bar; 20 void f() { 21 Bar i; 22 } 23 }; 24 25 // PR7625 26 template<typename T> struct a : T { 27 struct x : T { 28 int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}} 29 }; 30 }; 31 32 // rdar://8605381 33 namespace rdar8605381 { 34 struct X {}; 35 36 struct Y { // expected-note{{candidate constructor (the implicit copy constructor) not viable}} 37 #if __cplusplus >= 201103L // C++11 or later 38 // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} 39 #endif 40 41 Y(); 42 }; 43 44 struct { 45 Y obj; 46 } objs[] = { 47 new Y // expected-error{{no viable conversion}} 48 }; 49 } 50 51 // http://llvm.org/PR8234 52 namespace PR8234 { 53 template<typename Signature> 54 class callback 55 { 56 }; 57 58 template<typename R , typename ARG_TYPE0> 59 class callback<R( ARG_TYPE0)> 60 { 61 public: 62 callback() {} 63 }; 64 65 template< typename ARG_TYPE0> 66 class callback<void( ARG_TYPE0)> 67 { 68 public: 69 callback() {} 70 }; 71 72 void f() 73 { 74 callback<void(const int&)> op; 75 } 76 } 77 78 namespace PR9007 { 79 struct bar { 80 enum xxx { 81 yyy = sizeof(struct foo*) 82 }; 83 foo *xxx(); 84 }; 85 } 86 87 namespace PR9026 { 88 class InfallibleTArray { 89 }; 90 class Variant; 91 class CompVariant { 92 operator const InfallibleTArray&() const; 93 }; 94 class Variant { 95 operator const CompVariant&() const; 96 }; 97 void Write(const Variant& __v); 98 void Write(const InfallibleTArray& __v); 99 Variant x; 100 void Write2() { 101 Write(x); 102 } 103 } 104 105 namespace PR10270 { 106 template<typename T> class C; 107 template<typename T> void f() { 108 if (C<T> == 1) // expected-error{{expected unqualified-id}} 109 return; 110 } 111 } 112 113 namespace rdar11806334 { 114 115 class cc_YCbCr; 116 117 class cc_rgb 118 { 119 public: 120 cc_rgb( uint p ); // expected-error {{unknown type name}} 121 cc_rgb( cc_YCbCr v_in ); 122 }; 123 124 class cc_hsl 125 { 126 public: 127 cc_rgb rgb(); 128 cc_YCbCr YCbCr(); 129 }; 130 131 class cc_YCbCr 132 { 133 public: 134 cc_YCbCr( const cc_rgb v_in ); 135 }; 136 137 cc_YCbCr cc_hsl::YCbCr() 138 { 139 cc_YCbCr v_out = cc_YCbCr( rgb()); 140 return v_out; 141 } 142 143 } 144 145 namespace test1 { 146 int getString(const int*); 147 template<int a> class ELFObjectFile { 148 const int* sh; 149 ELFObjectFile() { 150 switch (*sh) { 151 } 152 int SectionName(getString(sh)); 153 } 154 }; 155 } 156 157 namespace test2 { 158 struct fltSemantics ; 159 const fltSemantics &foobar(); 160 void VisitCastExpr(int x) { 161 switch (x) { 162 case 42: 163 const fltSemantics &Sem = foobar(); 164 } 165 } 166 } 167 168 namespace test3 { 169 struct nsCSSRect { 170 }; 171 static int nsCSSRect::* sides; 172 nsCSSRect dimenX; 173 void ParseBoxCornerRadii(int y) { 174 switch (y) { 175 } 176 int& x = dimenX.*sides; 177 } 178 } 179 180 namespace pr16964 { 181 template<typename> struct bs { 182 bs(); 183 static int* member(); // expected-note{{possible target}} 184 member(); // expected-error{{C++ requires a type specifier for all declarations}} 185 static member(); // expected-error{{C++ requires a type specifier for all declarations}} 186 static int* member(int); // expected-note{{possible target}} 187 }; 188 189 template<typename T> bs<T>::bs() { member; } // expected-error{{did you mean to call it}} 190 191 bs<int> test() { 192 return bs<int>(); // expected-note{{in instantiation}} 193 } 194 } 195 196 namespace pr12791 { 197 template<class _Alloc> class allocator {}; 198 template<class _CharT> struct char_traits; 199 struct input_iterator_tag {}; 200 struct forward_iterator_tag : public input_iterator_tag {}; 201 202 template<typename _CharT, typename _Traits, typename _Alloc> struct basic_string { 203 struct _Alloc_hider : _Alloc { _Alloc_hider(_CharT*, const _Alloc&); }; 204 mutable _Alloc_hider _M_dataplus; 205 template<class _InputIterator> basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a = _Alloc()); 206 template<class _InIterator> static _CharT* _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, input_iterator_tag); 207 template<class _FwdIterator> static _CharT* _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, forward_iterator_tag); 208 static _CharT* _S_construct(size_type __req, _CharT __c, const _Alloc& __a); // expected-error{{unknown type name 'size_type'}} 209 }; 210 211 template<typename _CharT, typename _Traits, typename _Alloc> 212 template<typename _InputIterator> 213 basic_string<_CharT, _Traits, _Alloc>:: basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a) 214 : _M_dataplus(_S_construct(__beg, __end, __a, input_iterator_tag()), __a) {} 215 216 template<typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > struct basic_stringbuf { 217 typedef _CharT char_type; 218 typedef basic_string<char_type, _Traits, _Alloc> __string_type; 219 __string_type str() const {__string_type((char_type*)0,(char_type*)0);} 220 }; 221 222 template class basic_stringbuf<char>; 223 } 224 225 namespace pr16989 { 226 class C { 227 template <class T> 228 C tpl_mem(T *) { return } // expected-error{{expected expression}} 229 void mem(int *p) { 230 tpl_mem(p); 231 } 232 }; 233 class C2 { 234 void f(); 235 }; 236 void C2::f() {} 237 } 238 239 namespace pr20660 { 240 appendList(int[]...); // expected-error {{C++ requires a type specifier for all declarations}} 241 appendList(int[]...) { } // expected-error {{C++ requires a type specifier for all declarations}} 242 } 243 244