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