Unlike ordinary functions, overloaded operators cannot declare a parameter with a default value (overloaded operator() is the only exception):
Code: CPP
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.