Is there a recent (3.4.2 or later) patch for the following problem?
Consider the short program fragment below. There are two failures, and one success under gcc. The entire fragment compiles ok with the latest Microsoft Visual Studio and even one version before that. With gcc 3.4.1 (Cygwin) and gcc 3.4.2, I obtain error messages like: ambig.cpp: In function `bool fail1(const X&)': ambig.cpp:16: error: ambiguous overload for 'operator==' in 'x == 4660' ambig.cpp:16: note: candidates are: operator==(int, int) <built-in> ambig.cpp:5: note: bool operator==(short unsigned int, const C&) ambig.cpp: In function `bool fail2(const X&)': ambig.cpp:21: error: ambiguous overload for 'operator==' in 'x == 4660u' ambig.cpp:21: note: candidates are: operator==(int, int) <built-in> ambig.cpp:5: note: bool operator==(short unsigned int, const C&) It seems the compiler will not prefer the conversion from X to unsigned short in order to compile the (subsequent unsigned short to unsigned short) comparison and considers the competing conversions to C as viable. Earl Chew ------------------------------------------------------------------------------- class C { public: C(unsigned short); friend bool operator==(unsigned short, const C&); }; class X { public: operator unsigned short() const; }; bool fail1(const X& x) { return x == 0x1234; } bool fail2(const X& x) { return x == (unsigned short) 0x1234; } bool succeeds(const X& x) { return (unsigned short) x == 0x1234; }