Argumento padrão vs sobrecargas em C ++

Por exemplo, em vez de

void shared_ptr::reset() noexcept;
template <typename Y>
void shared_ptr::reset(Y* ptr);

alguém pode pensar em

template <typename Y = T>
void shared_ptr::reset(Y* ptr = nullptr);

Eu acho que a diferença de desempenho é insignificante aqui, e a segunda versão é mais concisa. Existe alguma razão específica para o padrão C ++ seguir o primeiro caminho?

omesma questão foi solicitado o idioma Kotlin e o argumento padrão é o preferido.

Atualizar:

std::unique_ptr::reset() segue o design do argumento padrão (consulteaqui) Então eu acho que a razãostd::shared_ptr::reset() usa sobrecargas é porque eles têm especificações de exceção diferentes.

questionAnswers(4)

yourAnswerToTheQuestion