Look at std::numeric_limits: it has both static member constants (is_signed, digits, radix, max_exponent) and static member functions (max(), epsilon(), infinit()).
The defining choice in its pre-C++11 design was whether the constant is always an integer (which means it is possible to initialize such static const member inside the class): numeric_limits<T>::radix is always an integer, numeric_limits<T>::max() can be a double.
Integer constants were more useful than functions because they can be used a constant expressions (as template parameters, array sizes, etc). With C++11, this distinction is less important, since functions can be constexpr too.