Re: Whose idea to make it a function?
Frederick Gotham wrote:
"Bo Persson" posted:
Because floating point values are not compile time constants. (Think
cross-compiler).
Hmm... the following snippet suggests otherwise:
int main()
{
char *p = 25235.25225 ? 0 : 1;
}
The above program shows that a floating point literal is a compile-time
constant - but that fact was not being questioned. The challenge was to
replace a floating point literal with a symbolic constant - and without
the program being at all affected by the change.
So revising the above program to:
const double kConstDouble = 25235.25225;
int main()
{
char *p = kConstDouble ? 0 : 1; // error: invalid conversion
}
is a better test. And even though this program's logic appears to be
unchanged from the original, it is no longer the same program. This
revised version no compiles successfully because 1 is not a type of
pointer (whereas the original program simply eliminated the false case
of the conditional expression altogether.)
In essence there is really no difference in efficiency whether
numeric_limits<double> is declared as a constant and as an inline
function - because neither is a constant expression. And given that (in
general) methods should be favored over direct access to data (to
promote encapsulation), there is a good argument for
numeric_limit::max's current implementation.
There is also a good argument for changing the rules governing constant
expressions in C++. At least that was my conclusion after reading the
"Generalized Constant Expressions" proposal found here:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1972.pdf
Greg
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]