An entity in the Rust type system, which can be one of
several kinds (types, lifetimes, and consts).
To reduce memory usage, a
GenericArg is an interned pointer,
with the lowest 2 bits being reserved for a tag to
indicate the type (
Const) it points to.
Specifies the user-given self type. In the case of a path that refers to a member in an inherent impl, this self type is sometimes needed to constrain the type parameters on the impl. For example, in this code:
Stores the user-given substs to reach some fully qualified path
<T as Trait>::Item).