Re: ambiguous constructor? Is it right?
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?
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. :-)
--
Thanks
Barry