[gnu.g++.bug] G++ allows ambiguous overloading:

schmidt%crimee.ics.uci.edu@PARIS.ICS.UCI.EDU ("Douglas C. Schmidt") (01/13/89)

Hi,

   The following short C++ program contains an erroneous conversion,
according to cfront 1.2.1.  It was taken from the article ``Building
Well-Behaved Type Relationships in C++'' by R.B. Murray.

----------------------------------------
class Orange {
public:
   char *c;
   operator int () {
      return (int (c));
   }
};

class Apple {
public:
   int i;
   Apple() {
   }        
   Apple(Orange F) {
      i = F;
   }
   
};

overload cross;
void cross (Orange, Apple);
void cross (Apple, Apple);

main ( ) {
   Orange Navel;
   Apple Mac;
   cross(Navel,Navel); // error: two possible conversions.
}
----------------------------------------

Here's the CC diagnostic:

----------------------------------------
CC  test.c:
"test.c", line 27: error: ambiguous argument for overloaded cross()
1 error
----------------------------------------

g++ 1.32 doesn't complain, but should.

Doug