Alex Rivera | Logout

Why is std::numeric_limits<T>::max() a function?

Asked 2010-05-04T14:44:06.740
33

In the C++ Standard Library the value std::numeric_limits<T>::max() is specified as a function. Further properties of a specific type are given as constants (likestd::numeric_limits<T>::is_signed). All constants that are of type T are given as functions, whereas all other constants are given as, well, constant values.

What's the rationale behind that?

Edit
Report

1 Answer

22

To expand on Neil's remark, std::numeric_limit<T> is available for any number type including floating point numbers, and if you dig through the comp.lang.c++ thread, you'll see the mention that it might not be possible to define the static variables for floating point values.

Bo Persson 29 Dec 2009, 1:41:38 am

I believe it was because the floating point values could not be const static members initialized in the class definition. So it was considered more consistent to make them all functions. That way, at least they could be inlined.

So, for consistency they decided to put both integral and floating points behind methods.

It will change with C++0x, so there's hope.

answered 2010-05-04T15:00:19.503

Your Answer