#include #include using namespace std; class Day; // forward declaration class Number { int n; public: Number(int i) : n(i) { cout << "Number(int) ctor called\n"; } operator int() const; operator Day() const; }; Number::operator int() const { cout << "* Number::operator int() called\n"; return n; } const string Days[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday" }; class Day { string dow; public: Day(int n) : dow(Days[n%7]) { cout << "Day(int) ctor called\n"; } operator Number() const; // convert Day to Number void operator!() const { cout << "dow = " << dow << endl; } }; Day::operator Number() const { cout << "** Day:: operator Number() called\n"; for (int i = 0; i < 7; i++) if (dow == Days[i]) return Number(i); return Number(-1); } Number::operator Day() const // Why is this function here? { cout << "*** Number::operator Day() called\n"; return n; //Day(n); } void somefunction(Day) { cout << "somefunction called\n"; } int main() { Number N1(65); cout << "N1 = " << N1 << endl; Day d1(1); !d1; // Day d2(N1); Why is this an ambiguity? Number N2(d1); cout << "N2 = " << N2 << endl; !Day(Number(d1)+2); somefunction(N1); }