Poniższy kod kompiluje dobrze na wszystkich kompilatorów, które sprawdziłem (clang, mingw, g ++) innych niż MSVC.Dlaczego == operator przeciążenie enum dwuznaczne w 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 nie powiedzie się z powodu następującego błędu:
>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)'
Każdy wgląd byłoby świetnie, byłem drapiąc głowę o tym cały dzień.
Moja wersja MSVC to 14,0 jednak testowałem ją online w wersji 19.00.23506 i pojawia się ten sam błąd.
Błąd nie występuje jednak w wersji 19.11.25331.0. Błąd kompilatora?
Prawdopodobnie dlatego, że jest wbudowany. – StoryTeller
Na marginesie, byłbym zdezorientowany, gdybym musiał użyć twojej wersji 'operatora ==' ponieważ nie testuje równości. – piwi
@piwi - to tylko minimalny kod do odtworzenia niejednoznacznego błędu, – hippiemancam