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