xref: /aosp_15_r20/external/clang/test/SemaObjCXX/conversion-to-objc-pointer.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li// expected-no-diagnostics
3*67e74705SXin Li// rdar: // 7963410
4*67e74705SXin Li
5*67e74705SXin Litemplate<class T>
6*67e74705SXin Liclass TNSAutoRef
7*67e74705SXin Li{
8*67e74705SXin Lipublic:
9*67e74705SXin Li	TNSAutoRef(T t)
10*67e74705SXin Li		:	fRef(t)
11*67e74705SXin Li		{ }
12*67e74705SXin Li
13*67e74705SXin Li	~TNSAutoRef()
14*67e74705SXin Li		{  }
15*67e74705SXin Li
16*67e74705SXin Li	operator T() const
17*67e74705SXin Li		{ return fRef; }
18*67e74705SXin Li
19*67e74705SXin Li	T Get() const
20*67e74705SXin Li		{ return fRef; }
21*67e74705SXin Li
22*67e74705SXin Liprivate:
23*67e74705SXin Li	T fRef;
24*67e74705SXin Li};
25*67e74705SXin Li
26*67e74705SXin Li@interface NSObject
27*67e74705SXin Li- (id) alloc;
28*67e74705SXin Li- (id)init;
29*67e74705SXin Li@end
30*67e74705SXin Li
31*67e74705SXin Li@interface TFoo : NSObject
32*67e74705SXin Li- (void) foo;
33*67e74705SXin Li@end
34*67e74705SXin Li
35*67e74705SXin Li@implementation TFoo
36*67e74705SXin Li- (void) foo {}
37*67e74705SXin Li@end
38*67e74705SXin Li
39*67e74705SXin Li@interface TBar : NSObject
40*67e74705SXin Li- (void) foo;
41*67e74705SXin Li@end
42*67e74705SXin Li
43*67e74705SXin Li@implementation TBar
44*67e74705SXin Li- (void) foo {}
45*67e74705SXin Li@end
46*67e74705SXin Li
47*67e74705SXin Liint main () {
48*67e74705SXin Li	TNSAutoRef<TBar*> bar([[TBar alloc] init]);
49*67e74705SXin Li	[bar foo];
50*67e74705SXin Li	return 0;
51*67e74705SXin Li}
52