То, что вы видите, это «общие ограничения» для неопределенного типа. Так что его результаты не актуальны. Если вы посмотрите ниже, вы увидите:
template<> class _CRTIMP2_PURE numeric_limits<char>
: public _Num_int_base
{ // limits for type char
public:
typedef char _Ty;
static _Ty (__CRTDECL min)() _THROW0()
{ // return minimum value
return (CHAR_MIN);
}
static _Ty (__CRTDECL max)() _THROW0()
{ // return maximum value
return (CHAR_MAX);
}
// etc.
};
Это специализация универсального шаблона для типа char
, которая дает необходимый результат.
Например, когда вы пишете:
int iMax = std::numeric_limits<char>::max() ;
он будет использовать специализированную версию numeric_limits во время компиляции и, таким образом, поместит значение CHAR_MAX в переменную iMax.