以下代碼可以編譯我檢查過的所有編譯器(clang,mingw,g ++),而不是MSVC。爲什麼==運算符在MSVC中含糊不清的運算符重載
enum class Foo{BAR};
bool operator==(Foo a, Foo b)
{
return (int)a & (int)b;
}
int main(int argc, char *argv[])
{
Foo::BAR==Foo::BAR;
return 0;
}
MSVC失敗,出現以下錯誤:
>main.cpp(10): error C2593: 'operator ==' is ambiguous
>main.cpp(3): note: could be 'bool operator ==(Foo,Foo)'
>main.cpp(10): note: while trying to match the argument list '(Foo, Foo)'
任何有識之士將是巨大的,我整天都在抓我的頭這一點。
我的MSVC版本是14.0,但是我使用版本19.00.23506在線測試了它,並且出現了相同的錯誤。
但是,該錯誤與版本19.11.25331.0不兼容。 編譯錯誤呢?
可能是因爲有內置的。 – StoryTeller
作爲一個方面說明,如果我必須使用您的'operator =='版本,我會感到困惑,因爲它不會測試相等性。 – piwi
@piwi - 這只是重現模糊錯誤的最小代碼, – hippiemancam