Clarify wording of [class.eq]
Nobody has claimed this yet.
- Dominant language
- TeX
- Stars
- 221
- Forks
- 813
- Avg merge
- 16h 4m
- Merged PRs (30d)
- 36
Description
Background
[class.eq] currently reads:
The return value
Vof a defaulted==operator function with parametersxandyis determined by comparing corresponding elements $x_i$ and $y_i$ in the expanded lists of subobjects forxandy(in increasing index order) until the first index $i$ where $x_i == y_i$ yields a result value which, when contextually converted tobool, yieldsfalse.
If no such index exists,Vistrue.
Otherwise,Visfalse.
The first long sentence describes the side effects of calling a defaulted operator==, while the other two sentences describe the return value.
This is unambiguous, but I think the wording could be improved.
Problem
At first glance this might be interpreted in a way that describes three distinct cases. In that case it's hard to make sense of the "Otherwise, V is false." sentence, as seemingly the previous sentences cover all cases.
This came up on the std-discussion mailing list: https://lists.isocpp.org/std-discussion/2022/12/1927.php
Some proposals for rewording
- Mirror the wording of [class.spaceship]:
...when contextually converted to
bool, yieldsfalse;
Visfalse.
If no such index exists,Vistrue.
- Switch around the last two sentences:
..when contextually converted to
bool, yieldsfalse.
If such index exists,Visfalse.
Otherwise,Vistrue.
Some other considerations
Even though the first long sentence describes the side effects of calling a defaulted operator==, it leads in with "The return value V of a defaulted == operator function with parameters x and y is determined...". It might be better to reword the first sentence in a way that doesn't mention the return value yet. One such wording would be, combined with the second suggestion above:
When a defaulted
==operator function is called with parametersxandythen the corresponding elemnts $x_i$ and $y_i$ in the expanded lists of subobjects forxandy(in increasing index order) are compared until the first index $i$ where $x_i == y_i$ yields a result value which, when contextually converted tobool, yieldsfalse.
If such index exists, the return value isfalse.
Otherwise, the return value istrue.
[class.spaceship] can have similar treatment.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in source/classes.tex at [class.eq], then compare its wording with [class.spaceship] and the linked std-discussion thread. Clarify the description of defaulted operator== evaluation and return values, resolving the proposed alternatives; done means the standard wording is unambiguous and consistent with the related section.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100