Listing 4 Shows that only one user-defined conversion is allowed
// convert4.cpp #include <iostream.h> struct B; struct A { double x; A(const B& b); }; void f(const A& a) { cout << "f: "<< a.x << endl; } struct B { double y; B(double d) : y(d) { cout << "B::B(double)" << endl; } }; A::A(const B& b) : x(b.y) { cout << "A::A(const B&)" << endl; } main() { A a(1); f(a); B b(2); f(b); // The following won't compile: // f(3) // But these will: f(B(3)); f(A(4)); return 0; } // Output: B::B(double) A::A(const B&) f: 1 B::B(double) A::A(const B&) f: 2 B::B(double) A::A(const B&) f: 3 B::B(double) A::A(const B&) f: 4 // End of File