forall(otype T) struct wrapper { T value; }; forall(otype T) wrapper(T) create() { wrapper(T) test; return test; } forall(otype T) wrapper(T)* ?=?(wrapper(T)* lhs, wrapper(T)* rhs) { lhs->value = rhs->value; return lhs; } int main(int argc, char const *argv[]) { wrapper(int) test; test = create(); return 0; }