// (C) Porkolab 2003 // // A.4.2. // // Constructor as conversion operator class date { public: // constructor date( int y=2000, int m=1, int d=1); // explicite constructor date( const char *s); // ... private: // ... int year; int month; int day; }; bool operator<( date d1, date d2); inline bool operator==( date d1, date d2) { return !(d1<d2 || d2<d1); } inline bool operator!=( date d1, date d2) { return d1<d2 || d2<d1; } inline bool operator<=( date d1, date d2) { return !(d2<d1); } inline bool operator>=( date d1, date d2) { return !(d1<d2); } inline bool operator>( date d1, date d2) { return d2<d1; } int main() { date d(2001, 3, 12); if ( d < 1999 ) // works { // ... } else if ( d < "2000.1.12") // does not work: explicit constructor { // ... } else if ( d < date("2000.1.12") ) // works: explicit call of constructor { // ... } }