この例が私の質問を最もよく表していると思います:
namespace N {
class C {
public:
friend bool operator==(const C& c, const C& x) {
return true;
}
friend bool f(const C& c, const C& x) {
return true;
}
};
class D {
public:
bool operator==(const D& x) {
bool a = C{} == C{}; // this works
return true;
}
bool f(const D& x) {
bool a = f(C{}, C{}); // this does not work
return true;
}
};
}
私は常にオーバーロードされた演算子を「呼び出し構文」を除いて関数と同じであると見なしてきました。上記の違いに気付きましたが、ADL または名前検索ルールに違いがあります (どちらかわかりません)。
bool operator==(const C& c, const C& x)
が見つかったのに が見つからない理由を誰か説明できますかbool f(const C& c, const C& x)
?