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 + -
显示快捷键?