Почему C++ позволяет специализировать тип для true
и false
параметров?
template<bool> struct omg { /* can't access anything declared here */ };
template<> struct omg<true> { };
template<> struct omg<false> { };
Есть ли ситуация, когда это имеет смысл/полезно?
Я думаю, такой ситуации нет. Но стандарт не имеет ограничений для шаблонных непиговых параметров, которые подходят для условий. Кстати, это было такое ограничение, оно должно быть для всех типов. Неправильно делать что-то вроде
enum A { first, second };
template<A> struct omg {};
template<> struct omg<first> {};
template<> struct omg<second> {};
и это слишком сложно, ИМХО.