For example, instead of
void shared_ptr::reset() noexcept;
template
void shared_ptr::reset(Y* ptr);
one may think of
There is a fundamental difference between an overload and a default pointer:
So semantically speaking, the default value is a short-cut embeded in the calling code, whereas the overload is a meaning embedded in the called code.