My understanding is:
The “in” modifier for a generic type, e.g.
<in T>, is used when T can only be the type of an argument to a function.
The “out” modifier, e.g.
<out T>, is used when T can only be the type of a function result, or when T is the type of a constructor argument.
What I don’t get is why “out” applies to constructor argument types. Those aren’t outputs, are they? Was that a convenience to avoid the need for creating a third modifier?