Кто-нибудь знает, как работает следующий код для аргумента шаблона для enable_if?Синтаксис шаблона шаблона как выражение
template <int n> void f(typename std::enable_if<(n < 0)>::type* = 0) {
/* ... n is negative ... */
}
template <int n> void f(typename std::enable_if<(n >= 0)>::type* = 0) {
/* ... n is positive ... */
}
Конкретно эта часть (n < 0)>::type*
, которая не имеет смысла для меня, потому что это выглядит как компилятор неявно преобразовывать выражение (n < 0)
в объект.
Я также видел этот стиль обработки выражения как объекта в нескольких других примерах SFINAE, но то, что здесь происходит, ускользает от меня. Является ли объект определенным в некотором заголовке C++ или это уже в стандарте? Если да, то каков этот метод обработки выражения как вызываемого объекта и как я могу больше узнать об этом?
Большое спасибо.