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

1522. conj specification is now nonsense

Section: 29.4.10 [cmplx.over] Status: C++11 Submitter: P.J. Plauger Opened: 2010-10-14 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [cmplx.over].

View all issues with C++11 status.

Discussion:

In Pittsburgh, we accepted the resolution of library issue 1137(i), to add a sentence 3 to [cmplx.over]:

All the specified overloads shall have a return type which is the nested value_type of the effectively cast arguments.

This was already true for four of the six functions except conj and proj. It is not completely unreasonable to make proj return the real value only, but the IEC specification does call for an imaginary part of -0 in some circumstances. The people who care about these distinctions really care, and it is required by an international standard.

Making conj return just the real part breaks it horribly, however. It is well understood in mathematics that conj(re + i*im) is (re - i*im), and it is widely used. The accepted new definition makes conj useful only for pure real operations. This botch absolutely must be fixed.

[ 2010 Batavia: The working group concurred with the issue's Proposed Resolution ]

[ Adopted at 2010-11 Batavia ]

Proposed resolution:

Remove the recently added paragraph 3 from [cmplx.over]:

3 All the specified overloads shall have a return type which is the nested value_type of the effectively cast arguments.