1025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor 3025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor// <rdar://problem/8124080> 4025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename _Alloc> class allocator; 5025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<class _CharT> struct char_traits; 6025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename _CharT, typename _Traits = char_traits<_CharT>, 7025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor typename _Alloc = allocator<_CharT> > 8025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorclass basic_string; 9025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename _CharT, typename _Traits, typename _Alloc> 10025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorconst typename basic_string<_CharT, _Traits, _Alloc>::size_type 11025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorbasic_string<_CharT, _Traits, _Alloc>::_Rep::_S_max_size // expected-error{{no member named '_Rep' in 'basic_string<_CharT, _Traits, _Alloc>'}} 12025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; 13025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor 14025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor// PR7118 15025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregortemplate<typename T> 16025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregorclass Foo { 17025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor class Bar; 18025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor void f() { 19025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor Bar i; 20025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor } 21025291b591a528d8a3f303991f65e19fa1e90a9dDouglas Gregor}; 226a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis 236a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis// PR7625 246a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidistemplate<typename T> struct a : T { 256a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis struct x : T { 266a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}} 276a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis }; 286a622dfde49ff06df4e0487fa9782a9a137971acArgyrios Kyrtzidis}; 29d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis 30d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis// rdar://8605381 31d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisnamespace rdar8605381 { 32d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisstruct X {}; 33d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis 34d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisstruct Y { // expected-note{{candidate}} 35d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis Y(); 36d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis}; 37d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis 38d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidisstruct { 39d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis Y obj; 40d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis} objs[] = { 41d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis new Y // expected-error{{no viable conversion}} 42d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis}; 43d86132d52c1dd99ad5519abaad92533712692a8bArgyrios Kyrtzidis} 442c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 452c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis// http://llvm.org/PR8234 462c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisnamespace PR8234 { 472c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidistemplate<typename Signature> 482c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisclass callback 492c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 502c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis}; 512c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 522c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidistemplate<typename R , typename ARG_TYPE0> 532c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisclass callback<R( ARG_TYPE0)> 542c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 552c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis public: 562c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis callback() {} 572c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis}; 582c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 592c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidistemplate< typename ARG_TYPE0> 602c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisclass callback<void( ARG_TYPE0)> 612c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 622c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis public: 632c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis callback() {} 642c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis}; 652c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis 662c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidisvoid f() 672c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis{ 682c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis callback<void(const int&)> op; 692c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis} 702c4792c731690dbbcbe69dd0625977adffc2961aArgyrios Kyrtzidis} 71ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola 72ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindolanamespace PR9007 { 73ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola struct bar { 74ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola enum xxx { 75ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola yyy = sizeof(struct foo*) 76ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola }; 77ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola foo *xxx(); 78f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 79f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola} 80f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola 81f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindolanamespace PR9026 { 82f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class InfallibleTArray { 83f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 84f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class Variant; 85f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class CompVariant { 86f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola operator const InfallibleTArray&() const; 87f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 88f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola class Variant { 89f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola operator const CompVariant&() const; 90f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola }; 91f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola void Write(const Variant& __v); 92f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola void Write(const InfallibleTArray& __v); 93f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola Variant x; 94f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola void Write2() { 95f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola Write(x); 96f3beabfcbb35961b44afc093eb435df7f2a6b785Rafael Espindola } 97ac6a858f6b7df4e83e4ad5921565a0b425ea00c3Rafael Espindola} 989a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor 999a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregornamespace PR10270 { 1009a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor template<typename T> class C; 1019a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor template<typename T> void f() { 1029a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor if (C<T> == 1) // expected-error{{expected unqualified-id}} \ 1039a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor // expected-error{{invalid '==' at end of declaration}} 1049a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor return; 1059a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor } 1069a30c9946e898e595eb71f23dc9a60303428998bDouglas Gregor} 107ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 108ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisnamespace rdar11806334 { 109ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 110ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_YCbCr; 111ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 112ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_rgb 113ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 114ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis public: 115ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_rgb( uint p ); // expected-error {{unknown type name}} 116ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_rgb( cc_YCbCr v_in ); 117ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis}; 118ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 119ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_hsl 120ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 121ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis public: 122ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_rgb rgb(); 123ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_YCbCr YCbCr(); 124ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis}; 125ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 126ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidisclass cc_YCbCr 127ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 128ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis public: 129ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_YCbCr( const cc_rgb v_in ); 130ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis}; 131ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 132ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidiscc_YCbCr cc_hsl::YCbCr() 133ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis{ 134ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis cc_YCbCr v_out = cc_YCbCr( rgb()); 135ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis return v_out; 136ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis} 137ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis 138ee7af50cc7999a2e5101da80bef0fdcff8c90b11Argyrios Kyrtzidis} 1393954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola 1403954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindolanamespace test1 { 1413954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola int getString(const int*); 1423954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola template<int a> class ELFObjectFile { 1433954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola const int* sh; 1443954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola ELFObjectFile() { 1453954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola switch (*sh) { 1463954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola } 1473954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola int SectionName(getString(sh)); 1483954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola } 1493954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola }; 1503954d394e42e63b15b1a3634e4c93e0986c75a6dRafael Espindola} 1511a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola 1521a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindolanamespace test2 { 1531a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola struct fltSemantics ; 1541a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola const fltSemantics &foobar(); 1551a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola void VisitCastExpr(int x) { 1561a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola switch (x) { 1571a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola case 42: 1581a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola const fltSemantics &Sem = foobar(); 1591a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola } 1601a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola } 1611a7b2e99c09e4368d7b6e43cdbfe53ee0ade1a51Rafael Espindola} 162ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola 163ef4b666e841e3917385892713612888ec6c3a056Rafael Espindolanamespace test3 { 164ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola struct nsCSSRect { 165ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola }; 166ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola static int nsCSSRect::* sides; 167ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola nsCSSRect dimenX; 168ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola void ParseBoxCornerRadii(int y) { 169ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola switch (y) { 170ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola } 171ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola int& x = dimenX.*sides; 172ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola } 173ef4b666e841e3917385892713612888ec6c3a056Rafael Espindola} 1741e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 1751e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlovnamespace pr16964 { 1761e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<typename> struct bs { 1771e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov bs(); 1781e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov static int* member(); 1791e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov member(); // expected-error{{C++ requires a type specifier for all declarations}} 1801e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov static member(); // expected-error{{C++ requires a type specifier for all declarations}} 1811e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov static int* member(int); 1821e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov }; 1831e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 1841e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<typename T> bs<T>::bs() { member; } 1851e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 1861e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov bs<int> test() { 1871e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov return bs<int>(); 1881e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov } 1891e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov} 1901e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 1911e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlovnamespace pr12791 { 1921e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<class _Alloc> class allocator {}; 1931e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<class _CharT> struct char_traits; 1941e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov struct input_iterator_tag {}; 1951e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov struct forward_iterator_tag : public input_iterator_tag {}; 1961e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 1971e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<typename _CharT, typename _Traits, typename _Alloc> struct basic_string { 1981e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov struct _Alloc_hider : _Alloc {}; 1991e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov mutable _Alloc_hider _M_dataplus; 2001e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<class _InputIterator> basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a = _Alloc()); 2011e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<class _InIterator> static _CharT* _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, input_iterator_tag); 2021e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<class _FwdIterator> static _CharT* _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, forward_iterator_tag); 2031e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov static _CharT* _S_construct(size_type __req, _CharT __c, const _Alloc& __a); // expected-error{{unknown type name 'size_type'}} 2041e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov }; 2051e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 2061e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<typename _CharT, typename _Traits, typename _Alloc> 2071e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<typename _InputIterator> 2081e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov basic_string<_CharT, _Traits, _Alloc>:: basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a) 2091e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov : _M_dataplus(_S_construct(__beg, __end, __a), __a) {} 2101e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 2111e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template<typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > struct basic_stringbuf { 2121e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov typedef _CharT char_type; 2131e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov typedef basic_string<char_type, _Traits, _Alloc> __string_type; 2141e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov typedef typename __string_type::size_type __size_type; 2151e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov __string_type str() const {__string_type((char_type*)0,(char_type*)0);} 2161e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov }; 2171e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 2181e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov template class basic_stringbuf<char>; 2191e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov} 2201e75a1a9e5c66ea09eababb1c8f3e2f49cadf0bdSerge Pavlov 221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace pr16989 { 222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class C { 223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines template <class T> 224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines C tpl_mem(T *) { return } // expected-error{{expected expression}} 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void mem(int *p) { 226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines tpl_mem(p); 227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines class C2 { 230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void f(); 231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void C2::f() {} 233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 234