pow()
overloadsSection: 29.7 [c.math] Status: NAD Submitter: Steve Clamage Opened: 2011-08-29 Last modified: 2016-01-28
Priority: 3
View all other issues in [c.math].
View all issues with NAD status.
Discussion:
LWG issue 550 removed the functions:
float pow(float, int); double pow(double, int); long double pow(long double, int);
from header <cmath>
. This change does not seem to be mentioned in Annex C, C.2.14.
N3290 29.7 [c.math]/p11 says:
Moreover, there shall be additional overloads sufficient to ensure:
- If any argument corresponding to a
double
parameter has typelong double
, then all arguments corresponding todouble
parameters are effectively cast tolong double
.- Otherwise, if any argument corresponding to a
double
parameter has typedouble
or an integer type, then all arguments corresponding todouble
parameters are effectively cast todouble
.- Otherwise, all arguments corresponding to
double
parameters are effectively cast tofloat
.From C99 7.12.7.4 we have:
double pow(double, double);29.7 [c.math]/p11/b2 says that if the client calls
pow(2.0f, 2)
, then theint
for second argument causes the following effective call to be made:pow(static_cast<double>(2.0f), static_cast<double>(2)) -> doubleThe first sentence of p11 implies that this is done by supplying the following additional overload:
double pow(float, int);If the client calls
pow(2.0, 2)
, then the same reasoning (b2 again) implies the following additional overload:double pow(double, int);If the client calls
pow(2.0l, 2)
, then b1 implies the following additional overload:long double pow(long double, int);In all, p11 implies hundreds (perhaps thousands?) of extra overloads. All but one of which is a superset of the overloads required by C++98/03 (that one being
In practice, at least some vendors implement p11 by using templated overloads as opposed to ordinary overloads.pow(float, int)
which had its return type changed fromfloat
todouble
).
Steve Clamage:
Thanks. I didn't see that those extra overloads were actually implied by p11, despite the first sentence. Without examples, the point is a bit subtle (at least for me).
[2015-05-05 Lenexa: Move to NAD]
Billy: I believe this is NAD.
STL: Oh, Steve himself agrees.
Wakely: The issue marked as NAD will be sufficient.
STL: Yes, we should get rid of this.
Billy: I don't see any minutes from Issaquah.
Marshall: Since Steve agrees, does anyone object to marking as NAD?
Nope.
Proposed resolution: