Đoạn mã sau biên dịch tốt trên tất cả các trình biên dịch mà tôi đã kiểm tra (clang, mingw, g ++) ngoài MSVC.Tại sao là == toán tử quá tải của enum mơ hồ trong 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 không thành công với các lỗi sau:
>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)'
Bất kỳ cái nhìn sâu sắc sẽ là tuyệt vời, tôi đã gãi đầu của tôi về vấn đề này cả ngày.
Phiên bản MSVC của tôi là 14.0 tuy nhiên tôi đã thử nghiệm trực tuyến với phiên bản Phiên bản 19.00.23506 và cùng một lỗi xuất hiện.
Lỗi này không mặc nhiên với phiên bản 19.11.25331.0. Lỗi trình biên dịch?
Có thể vì có tích hợp sẵn. – StoryTeller
Là một lưu ý phụ, tôi sẽ nhầm lẫn nếu tôi phải sử dụng phiên bản 'operator ==' của bạn vì nó không kiểm tra sự bình đẳng. – piwi
@piwi - nó chỉ là mã tối thiểu để tái tạo lỗi mơ hồ, – hippiemancam