pow(complex<float>, int)Section: 29.4.10 [cmplx.over] Status: WP Submitter: Tim Song Opened: 2025-01-10 Last modified: 2025-02-16
Priority: Not Prioritized
View all other issues in [cmplx.over].
View all issues with WP status.
Discussion:
Before C++20, 29.4.10 [cmplx.over] says that this produces a complex<double>.
This was confirmed by LWG 844 and consistent with C99.
complex<common_type_t<float, int>>,
which is complex<float>. This is a breaking change that does not appear to have been
intentional.
[2025-02-07; Reflector poll]
Set status to Tentatively Ready after eight votes in favour during reflector poll.
[Hagenberg 2025-02-16; Status changed: Voting → WP.]
Proposed resolution:
This wording is relative to N5001.
Modify 29.4.10 [cmplx.over] as indicated:
-3- Function template
powhas additional constexpr overloads sufficient to ensure, for a call with one argument of typecomplex<T1>and the other argument of typeT2orcomplex<T2>, both arguments are effectively cast tocomplex<common_type_t<T1, T3, whereT2>>T3isdoubleifT2is an integer type andT2otherwise. Ifcommon_type_t<T1, T3is not well-formed, then the program is ill-formed.T2>