ファイル A.hpp:
struct foo
{
int x;
} foo;
inline bool operator ==(const foo &lhs, const foo &rhs)
{
/* ... */
}
ファイル B.hpp
#include "A.hpp"
namespace SomeNamespace
{
bool operator==(const foo &lhs, const foo &rhs)
{
/* ... */
}
/* ... */
void someFunction(const foo &foo_instance1, const foo &foo_instance2)
{
CPPUNIT_ASSERT(foo_instance1 == foo_instance2);
}
}
ASSERT のある行のコンパイラ エラーは次のとおりです。
error: ambiguous overload for 'operator==' ...
したがって、問題は、コンパイラが両方の比較演算子を認識することです。
A.hpp のグローバル名前空間の定義と B.hpp の SomeNamespace の定義があいまいです。
コンパイラが SomeNamespace の定義を使用しないのはなぜですか?