https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11187

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2012-01-13 00:00:00         |2017-1-11
                 CC|                            |msebor at gcc dot gnu.org
      Known to fail|                            |3.3, 4.5.3, 4.8.3, 4.9.3,
                   |                            |5.3.0, 6.3.0, 7.0

--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
The signed case is still accepted by today's trunk.  Clang diagnoses both as
expected.

$ (set -x && cat t.c && for s in signed unsigned; do gcc -DSIGN=$s -S -Wall
-xc++ t.c; done)
+ cat t.c
class Object
{
 SIGN short value;
public:
 operator SIGN short() { return value; }
 operator SIGN int()   { return value; }
};

SIGN int test(void)
{
 Object a,b;
 return a+b;
}
+ for s in signed unsigned
+ gcc -DSIGN=signed -S -Wall -xc++ t.c
+ for s in signed unsigned
+ gcc -DSIGN=unsigned -S -Wall -xc++ t.c
t.c: In function ‘unsigned int test()’:
t.c:12:10: error: ambiguous overload for ‘operator+’ (operand types are
‘Object’ and ‘Object’)
  return a+b;
         ~^~
t.c:12:10: note: candidate: operator+(int, int) <built-in>
t.c:12:10: note: candidate: operator+(int, unsigned int) <built-in>
t.c:12:10: note: candidate: operator+(unsigned int, int) <built-in>
t.c:12:10: note: candidate: operator+(unsigned int, unsigned int) <built-in>

Reply via email to