/* Test for using ObjC classes as C++ template parameters. */ /* Author: Ziemowit Laski . */ /* { dg-do run } */ #include #include #define CHECK_IF(expr) if(!(expr)) abort() @interface Base: Object - (int) meth; @end @interface Derived: Base - (int) meth; @end static int count = 0; template struct Templ { T *m; int i; Templ(): i(55), m([[T alloc] init]) { count++; } ~Templ() { [m free]; count--; } }; @implementation Base - (int) meth { return 333; } @end @implementation Derived - (int) meth { return 666; } @end int main (void) { CHECK_IF(count == 0); { Templ derived; CHECK_IF(derived.i == 55 && count == 1); Templ base; CHECK_IF(base.i == 55 && count == 2); CHECK_IF([base.m meth] == 333); CHECK_IF([derived.m meth] == 666); } CHECK_IF(count == 0); return 0; }