A static assertion that a type satisfies a given template constraint. It can be used as a UDA or in a static assert to make sure that a type conforms to the compile-time interface the user expects it to. The difference between using models and a simple static assert with the template contraint is that models will instantiate the failing code when the constraint is not satisfied, yielding compiler error messages to aid the user.