This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.
Section: 29.7.1 [cmath.syn] Status: Resolved Submitter: Casey Carter Opened: 2019-07-11 Last modified: 2023-02-07
Priority: 3
View other active issues in [cmath.syn].
View all other issues in [cmath.syn].
View all issues with Resolved status.
Discussion:
The "sufficient additional overloads" wording in 29.7.1 [cmath.syn] paragraph 2 does not apply to the special math functions, since they are not "overloaded functions". The lack of "sufficient additional overloads" doesn't agree with N3060 (the final draft of ISO/IEC 29124 which standardized the mathematical special functions) [sf.cmath] paragraphs 3 and 4:
-3- Each of the functions specified above that has one or more
doubleparameters (thedoubleversion) shall have two additional overloads:
a version with each
doubleparameter replaced with afloatparameter (thefloatversion), anda version with each
doubleparameter replaced with along doubleparameter (thelong doubleversion).The return type of each such
-4- Moreover, eachfloatversion shall befloat, and the return type of each suchlong doubleversion shall belong double.doubleversion shall have sufficient additional overloads to determine which of the above three versions to actually call, by the following ordered set of rules:
First, if any argument corresponding to a
doubleparameter in thedoubleversion has typelong double, thelong doubleversion is called.Otherwise, if any argument corresponding to a
doubleparameter in thedoubleversion has typedoubleor has an integer type, thedoubleversion is called.Otherwise, the
floatversion is called.
P226R1 "Mathematical Special Functions for C++17" notably
states: "At the level of and following [c.math], create a new subclause with heading and initial
content the same as IS 29124:2010's clause [sf.cmath], 'Additions to header <cmath>,'
renumbering as appropriate to the new context." which suggests the change between 29124 and C++17
was an oversight and not intentional.
std::sph_neumann({}, {}) is
well-formed.
[2020-04-07 Issue Prioritization]
Priority to 3 after reflector discussion.
[2023-02-07 Status changed: New → Resolved.]
Resolved by the application of P1467R9. It's now clear that the special functions should have "sufficient additional overloads".
Proposed resolution: