Possible Duplicate:
Why is std::numeric_limits<T>::max() a function?
why numeric_limits<T>::has_infinity is a const value and numeric_limits<T>::infinity is not? why make numeric_limits<T>::infinity a function?
Possible Duplicate:
Why is std::numeric_limits<T>::max() a function?
why numeric_limits<T>::has_infinity is a const value and numeric_limits<T>::infinity is not? why make numeric_limits<T>::infinity a function?
Because things like float, double or UDT static const values cannot be initialized in class and need an external definition. In simple words they need a memory location, while static const integral values do not (as long as a pointer/reference to them is not taken).
In C++11 these functions should be declared constexpr, which defeats any shortcoming you may be seeing from the fact that they are functions instead of constants.