forall(dtype T) struct wrap { int i; }; forall(otype T) void ?{}(wrap(T)* this) {} forall(otype T) void ?=?(wrap(T)* this) {} forall(otype T) void ^?{}(wrap(T)* this) {} struct List_t { int val; wrap(List_t) next; };