Если вы измените struct A
на:
template <int T>
struct A {
static const int b = 5;
};
, тогда A<T>::b<T>(T);
скомпилируется.
- В этом случае
A<T>::b
будет равно 5. T
равно 0. - Таким образом, 5 <0 является ложным (0) </li>
0 > (0)
также ложно;
Если вы замените код на что-то вроде:
auto x = A<T>::b<T>(T);
std::cout << typeid(x).name() << " " << x;
Вы получите:
bool 0
Таким образом, было несложно изменить A
, чтобы A<T>::b<T>(T)
был действительным утверждением.