Re: Is this a bug in comeau?
Faisal Vali wrote:
comeau online appears to compile this without ambiguity:
struct S { };
I will assume you meant
struct R { };
struct S : R { };
int f(S) { return 0; }
struct T {
operator S() { return S(); }
operator R() { return R(); }
};
T t;
int x = f(t); // This call should be ambiguous
I don't see any reason for that call to be ambiguous.
There is only one way to transform a T object into an S object, and that
is through T::operator S().
T::operator R() can not be involved, because there is no conversion from
an R to an S.
If the function had been
int f(R) { return 0; }
then the call would still not have been ambiguous.
In this case, both T::operator R() and T::operator S() could be used for
the conversion, but T::operator S() is disregarded as it requires an
additional conversion from derived class to base class that is not
needed for T::operaor R(). Therefor, T::operator R() is preferred.
This is a bug, right?
regards,
Faisal Vali
Radiation Oncology
Loyola
Bart v Ingen Schenau
--
a.c.l.l.c-c++ FAQ: http://www.comeaucomputing.com/learn/faq
c.l.c FAQ: http://c-faq.com/
c.l.c++ FAQ: http://www.parashift.com/c++-faq-lite/
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]