Is there any reason why the standard specifies them as template structs instead of simple boolean constexpr?
struct
constexpr
In an additional question that
One reason is that the type_traits proposal is older than the constexpr proposal.
Another one is that you are allowed to add specializations for your own types, if needed.