【发布时间】:2017-11-14 20:34:23
【问题描述】:
以下代码在我检查过的所有编译器(clang、mingw、g++)上都能正常编译,而不是 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 不会出现该错误。 那么编译器bug呢?
【问题讨论】:
-
可能是因为有内置的。
-
附带说明,如果我必须使用您的
operator==版本,我会感到困惑,因为它不测试相等性。 -
@piwi - 这只是重现模棱两可错误的最少代码,
-
@hippiemancam 哦,好吧,我的错。
-
@StoryTeller 这似乎很合理,如何覆盖这个内置的?另外,有什么想法为什么只有 MSVC 在没有任何警告的情况下抛出错误?
标签: c++ c++11 visual-c++ enums operator-overloading