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.