Problem with ambiguous overloaded operators
Jonathan Wakely
jwakely.gcc@gmail.com
Thu Jun 7 17:59:00 GMT 2012
On 7 June 2012 18:52, Jonathan Wakely wrote:
> On 7 June 2012 18:09, Arthur Schwarz wrote:
>>
>>
>> I am using g++ 4.5.3 as my compiler and NetBeans 7.1.2 as my IDE.
>>
>> What I wnat to do is to overload operators using all selected types. What I get
>> are error messages indicating that the usage is ambiquous. I understaad that
>> the runtime usage may be ambiguous using literal values.
>
> Literals are not run-time values, they are compile-time values, a call
> using a literal must be resolved at compile-time like any other call.
>
>> I don't understand why
>> a typed variable would cause ambiguity. And I would like to know how to code
>> around the issue. The issue (to me) is that char can be widened to long, and
>> unsigned char can be widened to unsigned long, but how do I take care of issues
char can be promoted to int, and unsigned char can be promoted to unsigned int.
>> between unsigned (char or long) and signed (char or long) since their ranges
>> are different.
>
> A long can be converted to any of the types you have overloaded the
> function for, there is no "hierarchy" of types that a long would
> prefer to convert to.
Actually that's not accurate, there is a conversion rank for integers,
but for the types you've used long doesn't "prefer" to convert to any
of them.
> You should overload the function for all types you need it for or
> explicitly convert the argument to one of the types you have
> overloaded the function for.
More information about the Gcc-help
mailing list