qual-types-1.mm

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· MM 代码 · 共 73 行

MM
73
字号
/* APPLE LOCAL file mainline *//* Test if ObjC++ can distinguish protocol qualifiers from   template arguments.  *//* Author:  Ziemowit Laski <zlaski@apple.com>.  *//* { dg-do run } */#include <objc/Object.h>#include <stdlib.h>#define CHECK_IF(expr) if(!(expr)) abort()@protocol Zone+ allocFromZone:(void *)zone;- copyFromZone:(void *)zone; @end@protocol Init <Zone>+ initialize;- init; @end@interface Foo: Object{ @public int val; }- init;@endtemplate <class T, class U> struct X {  T x; U y;};X<int, float> xx;template <typename T> struct Holder{  T *obj;  static int counter;  Holder(void) { obj = [[T alloc] init]; }  ~Holder(void) { [obj free]; --counter; }  id <Init, Zone> getObjId(void) { return obj; }  Object <Zone, Init> *getObj(void) { return obj; }};typedef Holder <Foo <Init, Zone> > FooHolder;@implementation Foo-(id) init {  [super init];  val = ++FooHolder::counter;  return self;}@endtemplate <typename T>int Holder<T>::counter = 0;int main (void) {    CHECK_IF(FooHolder::counter == 0);    {      FooHolder holder;      CHECK_IF(holder.obj->val == 1);      CHECK_IF(FooHolder::counter == 1);      FooHolder holder2;      CHECK_IF(holder2.obj->val == 2);      CHECK_IF(FooHolder::counter == 2);    }    CHECK_IF(FooHolder::counter == 0);    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?