Is there any reason why the standard specifies them as template structs instead of simple boolean constexpr?
struct
constexpr
In an additional question that
Probably because boost already had a version of type_traits that was implemented with templates.
And we all know how much people on the standards committee copy boost.