Unlike ordinary functions, overloaded operators cannot declare a parameter with a default value (overloaded operator() is the only exception):
class Date{ private: int day, month, year; public: Date & operator += (const Date & d = Date() ); //error, default arguments are not allowed};
This rule may seem arbitrary. However, it captures the behavior of built-in operators, which never have default operands either.