forall(T) struct wrapper { T val; }; forall(T) void ctor(wrapper(T)* this) { this->val = 0; } forall(T) wrapper(T) gcmalloc() { wrapper(T) w; ctor(&w); return w; } forall(T) wrapper(T)* ?=? (wrapper(T)* lhs, wrapper(T)* rhs) { lhs->val = rhs->val; return lhs; } int main(int argc, char *argv[]) { wrapper(int) test; test = gcmalloc(); return 0; }