Różnice między specjalizacją szablonu a przeciążaniem funkcji?

Wiem więc, że istnieje różnica między tymi dwoma smakowitościami kodu:

template <typename T>
T inc(const T& t)
{
    return t + 1;
}

template <>
int inc(const int& t)
{
    return t + 1;
}

i

template <typename T>
T inc(const T& t)
{
    return t + 1;
}

int inc(const int& t)
{
    return t + 1;
}

Jestem zdezorientowany, jakie są różnice funkcjonalne między tymi dwoma. Czy ktoś może pokazać sytuacje, w których te fragmenty różnią się od siebie?

questionAnswers(5)

yourAnswerToTheQuestion