Warum wird bei einer Überladung von Vorlagen und Nicht-Vorlagen mit der gleichen Signatur die Nicht-Vorlagenfunktion aufgerufen?

Ich habe diesen Code:

template<
    class T = const int &
> void f(T) {}

void f(const int &) {}

int main() {
   f(0);
}

Warum ruft es den zweiten anstelle des ersten auf? Ich würde sie als gleich ansehen, aber sie sind eindeutig nicht so, da ich keinen Fehler bei der Neudefinition erhalte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage