Добрый час возможно?
Код:
namespace nsA { namespace nsB {
enum class MyEnum
{
None = 0,
AA = 0x01,
BB = 0x02,
};
}}
template<class T> inline nsA::nsB::MyEnum operator&(nsA::nsB::MyEnum a, T b)
{
return nsA::nsB::MyEnum::None;
}
template<class T> inline bool operator!=(nsA::nsB::MyEnum a, T b)
{
return true;
}
namespace nsA { namespace nsB {
class CDoo {};
bool operator !=(CDoo x, CDoo y) { return 0; }
}}
namespace nsA { namespace nsB {
class CFoo {};
bool operator != (CFoo a, CFoo b) { return 0; }
}}
namespace nsA { namespace nsB {
void foo()
{
nsA::nsB::MyEnum ff0 = nsA::nsB::MyEnum::BB;
nsA::nsB::MyEnum ff = ff0 & nsA::nsB::MyEnum::BB;
bool b = operator != (ff, 0); //<-- при такой форме записи можно ::operator (но такое лучше не предлагать)
bool b1 = ff != 0; //<-- А здесь я вообще понимаю что просто никак.
}
}}
Ну а по факту понятно что компилятор даже не пытается заглянуть в глобальное пространство имён для поиска
нужного оператора.