An unbound type parameter (no constraints)
T can be a value type or a reference type.
Example: the implementation of the generic value type System.Nullable<T>
uses where T : struct
to constrain its type parameter to a value type.
T must be a value type.
Example: the implementation of the generic class System.WeakReference<T>
uses where T : class
to constrain its type parameter to a reference type.
T must be a reference type.