微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当前草案是否允许形成由两个非静态成员声明组成的重载集,其中一个具有引用限定符

如何解决当前草案是否允许形成由两个非静态成员声明组成的重载集,其中一个具有引用限定符

basic.scope#scope-3.3.1

两者都声明具有相同参数类型列表的函数,等价的 ([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
};

在这个片段中,#1 是否对应于 #2?由于 #2 有一个 cv 限定符但 #1 没有,即使具有相同 ref-qualifier 的条件为真,根据规则(注意该规则中强调的 ),它们不对应。那么,这是否意味着草案允许从这两个声明中形成一个重载集?毕竟,over.load#2.3 部分已被 P1787 删除

解决方法

此更改是 phrasing the rules more orthogonally 的无意结果,但由于这种正交性允许一些额外的有意义的重载集,因此并不急于“修复”它。特别是,它可能适用于目前正在考虑的 proposal for deducing this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。