template <ConstraintKind K>
struct ConstraintStorage
ConstraintStorage is implemented for each ConstraintKind. It holds the constraint value, default
value, how it maps onto LayoutInvocation and the ResolveConstraint() function that knows how to
resolve the constraint value.
Through inheritance, the member variable for the constraint value will be visible on Type objects
that have this constraint.