"Cannot convert" double (*) () noexcept 'to' double 'on initialization' when defining max double
I read that the standard way to use the C ++ maximum double value is std::numeric_limits<double>::max
.
Then, in each of my functions where I want to initialize my doubles as max double, I use:
#include <limits>
#define MAX_DOUBLE (std::numeric_limits<double>::max)
Using gcc -pedantic -pedantic-errors -Wall -Wextra -Werror I get the following error:
Cannot convert 'double (*)() noexcept' to 'double' in initialization
Can you explain this error?
source to share
std::numeric_limits<double>::max
is a function in the global namespace, not a constant. If you create a macro you need to specify the definition as a function identifier
#define MAX_DOUBLE std::numeric_limits<double>::max()
So passing MAX_DOUBLE in a double identifier, as the error message indicates, means initializing the double with a function pointer, which in this case is of type double (*)() noexcept
, causing a type mismatch.
Finally, for all the practical purposes DBL_MAX
defined in the climits , it had to serve your purpose, and thus you would not go through this agony,
source to share
As stated in the error message, you are directly using the function pointer ( double (*)() noexcept
) as double
. std::numeric_limits<double>::max
is declared as a function, you need to call it to get the value.
You can change
#define MAX_DOUBLE (std::numeric_limits<double>::max)
to
#define MAX_DOUBLE (std::numeric_limits<double>::max())
source to share