Earl Chew wrote: > 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; > } > GCC 4.1 compiles it. Cygwin's GCC is a bit old.
-- VH
signature.asc
Description: OpenPGP digital signature