This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

4191. P1467 changed the return type of pow(complex<float>, int)

Section: 29.4.10 [cmplx.over] Status: New Submitter: Tim Song Opened: 2025-01-10 Last modified: 2025-01-18

Priority: Not Prioritized

View other active issues in [cmplx.over].

View all other issues in [cmplx.over].

View all issues with New status.

Discussion:

Before C++20, 29.4.10 [cmplx.over] says that this produces a complex<double>. This was confirmed by LWG 844(i) and consistent with C99.

P1467 changed the return type to complex<common_type_t<float, int>>, which is complex<float>. This is a breaking change that does not appear to have been intentional.

Proposed resolution:

This wording is relative to N5001.

  1. Modify 29.4.10 [cmplx.over] as indicated:

    -3- Function template pow has additional constexpr overloads sufficient to ensure, for a call with one argument of type complex<T1> and the other argument of type T2 or complex<T2>, both arguments are effectively cast to complex<common_type_t<T1, T3T2>>, where T3 is double if T2 is an integer type and T2 otherwise. If common_type_t<T1, T3T2> is not well-formed, then the program is ill-formed.