[英]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.