Constrain type to be concrete subtype

No, since every type is also its own subtype. Dispatching on whether or not something is concrete is not possible.

Checking and throwing in the constructor is the only solution I know of, but usually not necessary.

2 Likes