Hi,

While compiling this (very simplified) code under Linux

<<<<start<<<<<<<
class C {
  public:
    C(char);
};

const C operator+(char c1, const C & s2);

enum E { a, b };

E f(char c)
{
  return (E) (c + a);   // + ambiguous ?
}
>>>>>end>>>>>>>>

g++ indicates that '+' in f() is ambiguous :

f.c:13: error: ISO C++ says that these are ambiguous, even though the worst
conversion for the first is better than the worst conversion for the second:
f.c:13: note: candidate 1: operator+(int, int) <built-in>
f.c:6: note: candidae 2: const C operator+(char, const C&)

Frankly I am surprized, conversion from an enum -> "int" seem natural
contrarily to the one from an enum -> char -> "const C &" using "C(char)"

Obviously it is easy to write "(int) c + a" or "c + (int) a" to solve this
problem.

I apologize if this code is really ambiguous

Best regards

Bruno Pages


-- 
           Summary: g++ says 'ambiguous call'
           Product: gcc
           Version: 4.0.2
            Status: UNCONFIRMED
          Severity: minor
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: bru dot pages at wanadoo dot fr


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24485

Reply via email to