jac*_*k X 6 c++ overloading language-lawyer c++23
两者都声明具有相同参数类型列表的函数,等价的 ([temp.over.link]) 尾随 requires 子句(如果有的话,除非在 [temp.friend] 中指定),并且,如果两者都是非静态成员, 相同的 cv 限定符(如果有)和ref 限定符(如果两者都有)
上面的规则可以理解为,对于两个具有相同参数类型列表的非静态成员函数,如果有人有一个cv-qualifiers,那么两个声明应该有相同的cv-qualifiers;如果两个声明都有 ref-qualifier,则它们应该具有相同的 ref-qualifier。否则,它们不对应。
struct A{
void show(); //#1
void show() const &; //#2
};
Run Code Online (Sandbox Code Playgroud)
在这个片段中,#1 是否对应于 #2?由于 #2 有一个 cv 限定符而 #1 没有,即使具有相同条件的条件为 ref-qualifier真,根据规则(注意该规则中的强调和 ),它们也不对应。那么,这是否意味着草案允许从这两个声明中形成一个重载集?毕竟,over.load#2.3部分被P1787 删除了。
此更改是更正交地表述规则的无意结果,但由于正交性允许一些额外的有意义的重载集,因此 \xe2\x80\x99t 并不急于 \xe2\x80\x9cfix\xe2\x80\x9d 它。特别是,它可能与当前正在考虑的推导this\xe2\x80\x99s 的提案配合得很好。