fork download
  1. // file: date.h
  2. #include <cstdio>
  3.  
  4. class date
  5. {
  6. friend bool operator<(date d1, date d2);
  7. public:
  8. // constructor
  9. date(int y=2015, int m=1, int d=1) : year(y), month(m), day(d) { }
  10. // explicit constructor
  11. explicit date(const char *s);
  12. private:
  13. int year;
  14. int month;
  15. int day;
  16. };
  17.  
  18. // question: use member or global operators?
  19. bool operator<(date d1, date d2);
  20. inline bool operator==(date d1, date d2) { return !(d1<d2 || d2<d1); }
  21. inline bool operator!=(date d1, date d2) { return d1<d2 || d2<d1; }
  22. inline bool operator<=(date d1, date d2) { return !(d2<d1); }
  23. inline bool operator>=(date d1, date d2) { return !(d1<d2); }
  24. inline bool operator>(date d1, date d2) { return d2<d1; }
  25.  
  26.  
  27. // file: date.cpp
  28. date:: date(const char *s)
  29. {
  30. sscanf(s, "%d.%d.%d", &year, &month, &day);
  31. }
  32.  
  33. bool operator<(date d1, date d2)
  34. {
  35. return d1.year < d2.year || d1.month < d2.month || d1.day < d2.day;
  36. }
  37.  
  38.  
  39. // file: main.cpp
  40. int main()
  41. {
  42. date d(2015, 3, 12);
  43.  
  44. if (d < date(2000, 1, 1)) // works: explicit call of constructor
  45. {
  46. /* ... */
  47. }
  48. else if (d < 2000) // works: implicit constructor
  49. {
  50. /* ... */
  51. }
  52. else if (d < "2015.1.12") // does not work: explicit constructor
  53. {
  54. /* ... */
  55. }
  56. else if (d < date("2015.1.12")) // works: explicit call of constructor
  57. {
  58. /* ... */
  59. }
  60. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int main()':
prog.cpp:52:16: error: invalid conversion from 'const char*' to 'int' [-fpermissive]
   else if (d < "2015.1.12")         // does not work: explicit constructor
                ^
prog.cpp:9:3: note: initializing argument 1 of 'date::date(int, int, int)'
   date(int y=2015, int m=1, int d=1) : year(y), month(m), day(d) { }
   ^
stdout
Standard output is empty