struct B {}; struct A { A() { } A(B) { } }; struct C { operator A() { return A(); } operator B() { return B(); } }; int main() { C c; A a1 = c; // OK A a2(c); // WTF??? }
GCC 4.7.2:
class.cc: In function ‘int main()’:
class.cc:15:8: error: call of overloaded ‘A(C&)’ is ambiguous
class.cc:15:8: note: candidates are:
class.cc:4:2: note: A::A(B)
class.cc:2:8: note: A::A(const A&)
А в предыдущей строке, значит, не ambiguous? В чем разница?