Barry wrote:
Zeppe wrote:
Dear all,
I have the following problem, that I'll try to explain with a very
minimal example:
class A
{
};
class B
{
public:
B() { }
B(const A&) { }
B(const B&) { }
};
class C
{
public:
operator A() const { return A(); }
operator B() const { return B(); }
};
int main(){
const C& c = C();
B b = static_cast<B>(c);
return 0;
}
Basically, I would expect that casting a const C& to B would call the
operator B() of C and that the construction C -> B (through the copy
what makes "operator B()" have higher priority?
because I specified a method for the conversion of C into B, in C. I
would expect it to be called in the static cast. The other way (C->A->B)
implies one level of implicit conversion, doesn't it?
constructor) would be preferred to C -> A -> B. In Visual C++ 9 it
actually does so, but gcc complains that there is an ambiguity. Who's
right (I guess Visual c++) and, in case, how could I nicely work
around the problem?
gcc is right,
You can compile using VC with /Za option, which disables the
extension, and produces the compile error.
I know ya gonna complain. :-)
No, I'm not, just a little bit disappointed :) And what about a
workaround? Is the only way to solve this to clean up one of the two
conversion ways?
I think it is, since it violates the standard.