changing the return type should be allowed only for compatible return values, to avoid breaking calling code, otherwise it is not safe to use anymore