Using a pointer method, as in "type *T", does not mean that the type
argument must be a pointer. If you write "(type *T C)", it means
that, given a type argument A, the type *A must implement the
constraint C. There is actually no reason to ever write "(type *T)"
with no constraint. That means that, given a type argument A, the
type *A must implement the empty constraint, which it does, because
all types implement the empty constraint.
Pointer methods do seem to be confusing. I think they have a clear
use, but it may be that they are too confusing for that use.
Ian