Title
Return types for defaulted <=>
Status
c++20
Section
11.10.3 [class.spaceship]
Submitter
Richard Smith

Created on 2019-08-14.00:00:00 last changed 48 months ago

Messages

Date: 2019-09-15.00:00:00

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 category of 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 resolution as applied to xi <=> xi that expression does not find a usable function, then Ri is void.

  • If the declared return type of a defaulted three-way comparison operator function R 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 and Otherwise, if the synthesized three-way comparison for comparison category of 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 category of type R between xi and yi yields...

Date: 2019-11-15.00:00:00

[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)?

History
Date User Action Args
2020-12-15 00:00:00adminsetmessages: + msg6468
2019-08-14 00:00:00admincreate