Description
The basic.scope#scope-3.3.1 says
both declare functions with the same parameter-type-list, equivalent ([temp.over.link]) trailing requires-clauses (if any, except as specified in [temp.friend]), and, if both are non-static members, the same cv-qualifiers (if any) and ref-qualifier (if both have one)
The above rule could be understood to, For two non-static member functions with the same parameter-type-list, if anyone has a cv-qualifiers then both declarations should have the same cv-qualifiers; if both declarations have ref-qualifier, they should have the same ref-qualifier. Otherwise, they do not correspond.
struct A{
void show(); //#1
void show() const &; //#2
};
In this snippet, Does #1 correspond to #2? Since #2 has a cv-qualifier but #1 does not have, even if the condition for having the same ref-qualifier
is true, as per the rule(note the emphasized and in that rule), they do not correspond. So why couldn't they overload if per the draft? After all, the section over.load#2.3 was removed by P1787.
Activity
[-]Description about two non-static member declarations that correspond[/-][+]Description for two non-static member declarations to determine whether they correspond[/+]jensmaurer commentedon Mar 15, 2021
That looks like a core issue to me.
http://lists.isocpp.org/core/2021/03/10637.php
jensmaurer commentedon Mar 15, 2021
This arrived with P1787R6. The wording thus is new, and compilers haven't caught up yet.
https://lists.isocpp.org/core/2020/11/10201.php