Re: C++0x - a quick and dirty introduction (as of November 2007)
Gabriel Dos Reis wrote:
On Tue, 18 Dec 2007, Walter Bright wrote:
| But I wonder what the future will be for constexpr functions. I think it's
| possible that we may see that such functions are defined twice, once with
| constexpr and once without. This is because the suitability of a function for
| CTFE may often be dependent on its particular argument values.
Could you clarify that?
Sure. Suppose I have a square root function:
double sqrt(double d)
{
if (d < 0)
throw new SquareRootException();
... compute square root ...
return root;
}
If the language requires that I say, for all possible values of d, this
must be evaluatable at compile time, I've got a problem. So, instead I'd
have to write two functions:
double sqrt(double d)
{
if (d < 0)
throw new SquareRootException();
... compute square root ...
return root;
}
constexpr double sqrtx(double d)
{
... compute square root ...
return root;
}
This can be characterized as different argument values taking different
paths through the functions, some of which may be evaluatable at compile
time and some not.
There are other cases like, for example, some argument values may take
unreasonably long to execute at compile time, but only a short time at
runtime.
In other words, I think the decision to run at compile time or at run
time is properly put at the call site, not the definition site.
----
Walter Bright
http://www.digitalmars.com C, C++, D programming language compilers
---
[ 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 ]