This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115d. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-10-26
[Adopted as a DR at the November, 2019 meeting.]
It is unclear what the constraints are on the type R. We define the "synthesized three-way comparison for comparison category type R", but it's defined in such a way that it works for an arbitrary type R, and the uses of it do not impose a constraint that R is a comparison category type. Should it be permissible to default an operator<=> with some other return type, so long as the construction described in 11.10.3 [class.spaceship] works (specifically, so long as all subobjects have operator<=>s that can be converted to the specified return type)?
Proposed resolution (September, 2019)
Change 11.10.3 [class.spaceship] paragraphs 1-3, changing the running text of paragraph 2 to into a bulleted list, as follows:
The synthesized three-way comparison
for comparison categoryof type R (17.11.2 [cmp.categories]) of glvalues a and b...Let R be the declared return type of a defaulted three-way comparison operator function. Given an expanded list of subobjects for an object x of type C, let Ri be the type of the expression xi <=> xi
is denoted by Ri. If, or void if overload resolutionasapplied toxi <=> xithat expression does not find a usable function, then Ri is void.
If
the declared return type of a defaulted three-way comparison operator functionR is auto, then the return type is deduced as the common comparison type (see below) of R0, R1, ..., Rn-1. If the return type is deduced as void, the operator function is defined as deleted.
If the declared return type of a defaulted three-way comparison operator function is R andOtherwise, if the synthesized three-way comparisonfor comparison categoryof type R between any objects xi and xi is not defined or would be ill-formed, the operator function is defined as deleted....until the first index i where the synthesized three-way comparison
for comparison categoryof type R between xi and yi yields...