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