1 // RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fsyntax-only -verify -Wno-objc-root-class %s 2 // rdar://9070460 3 4 class TCPPObject 5 { 6 public: 7 TCPPObject(const TCPPObject& inObj); 8 TCPPObject(); 9 ~TCPPObject(); 10 11 TCPPObject& operator=(const TCPPObject& inObj)const ; // expected-note {{'operator=' declared here}} 12 13 void* Data(); 14 15 private: 16 void* fData; 17 }; 18 19 20 typedef const TCPPObject& CREF_TCPPObject; 21 22 @interface TNSObject 23 @property (assign, readwrite, nonatomic) CREF_TCPPObject cppObjectNonAtomic; 24 @property (assign, readwrite) CREF_TCPPObject cppObjectAtomic; 25 @property (assign, readwrite, nonatomic) const TCPPObject& cppObjectDynamic; 26 @end 27 28 29 @implementation TNSObject 30 31 @synthesize cppObjectNonAtomic; 32 @synthesize cppObjectAtomic; // expected-error{{atomic property of reference type 'CREF_TCPPObject' (aka 'const TCPPObject &') cannot have non-trivial assignment operator}} 33 @dynamic cppObjectDynamic; 34 35 - (const TCPPObject&) cppObjectNonAtomic 36 { 37 return cppObjectNonAtomic; 38 } 39 40 - (void) setCppObjectNonAtomic: (const TCPPObject&)cppObject 41 { 42 cppObjectNonAtomic = cppObject; 43 } 44 @end 45 46 47 // <rdar://problem/11052352> 48 @interface NSObject 49 + alloc; 50 - init; 51 - class; 52 @end 53 54 template<typename T> void f() { 55 NSObject *o = [NSObject.alloc init]; 56 [o class]; 57 } 58 59 template void f<int>(); 60