89 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// expected-no-diagnostics3 4@protocol NSObject @end5@interface NSObject6- (id)init;7- (id) alloc;8- (id) autorelease;9@end10 11template<class T>12class TNSAutoRef13{14public:15 TNSAutoRef(T t)16 : fRef(t)17 { }18 19 ~TNSAutoRef()20 { }21 22 operator T() const23 { return fRef; }24 25private:26 T fRef;27};28 29 30#pragma mark -31 32 33@protocol TFooProtocol <NSObject>34 35- (void) foo;36@end37 38 39#pragma mark -40 41 42@interface TFoo : NSObject43 44- (void) setBlah: (id<TFooProtocol>)blah;45@end46 47 48#pragma mark -49 50 51@implementation TFoo52 53- (void) setBlah: (id<TFooProtocol>)blah54 { }55@end56 57 58#pragma mark -59 60 61@interface TBar : NSObject62 63- (void) setBlah: (id)blah;64@end65 66#pragma mark -67 68 69@implementation TBar70 71- (void) setBlah: (id)blah72 { }73@end74 75 76#pragma mark -77 78 79int main (int argc, const char * argv[]) {80 81 NSObject* object1 = [[[NSObject alloc] init] autorelease];82 TNSAutoRef<NSObject*> object2([[NSObject alloc] init]);83 TNSAutoRef<TBar*> bar([[TBar alloc] init]);84 [bar setBlah: object1]; // <== Does not compile. It should.85 if (object1 == object2)86 [bar setBlah: object2]; // <== Does not compile. It should.87 return 0;88}89