[英]Overload resolution not applicable to operator overloading
N4296:13.1/1 [over.load]
说:
如果程序在同一作用域中包含两个此类不可重载的声明,则该程序格式错误。 [注意:此限制适用于范围中的显式声明,以及此类声明和通过using-声明(7.3.3)进行的声明之间的声明。 它不适用于因名称查找(例如,由于使用指令)或重载解析 (例如,用于操作员功能)而构造的功能集。 —尾注]
#include <iostream>
namespace A
{
int foo(){ return 1; };
}
using namespace A;
int foo(){ return 1; }
int main(){ }
这将是格式正确的,直到不使用foo为止。 这很清楚,这代表了我在报价单中提供的第一条注释(关于using-directive
)。 但是我不知道该标准对引用中我强调的运算符功能的重载解析意味着什么。 你能给我一个例子吗?
namespace A {
struct Foo{};
}
namespace B {
struct Bar{};
}
namespace A {
int operator+(const A::Foo&, const B::Bar&);
}
namespace B {
char operator+(const A::Foo&, const B::Bar&);
}
int main() { A::Foo() + B::Bar(); }
ADL同时找到A::operator+()
和B::operator+()
。 这两个签名仅在返回类型上有所不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.