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}
139