Pourquoi est-ce que C++ code manquant un argument formel nom dans une définition de fonction compiler sans mise en garde?

Tout a commencé avec quelques VS2005 MFC générées par le code, j'ai remarqué qu'il emportait une méthode avec quelque chose comme ceci:

void OnDraw(CDC* /*pDC*/)
{
    ...
    //TODO: Add your code here
}

Alors évidemment, dès que j'ai ajouté quelque chose que j'ai réalisé que j'avais besoin de dé-commentez le contrôleur de domaine principal argument formel pour compiler, mais je suis confus comment/pourquoi une fonction C++ permet de compiler (sans avertissement) lorsque l'argument formel n'a qu'un type et un nom:

void foo(int)
{
    int x = 3;
}
int main()
{
    foo(5);
    return 0;
}

Ne devrait pas générer au moins un avertissement (avec Mur ou /W4)? Il ne semble pas. Ai-je raté quelque chose? Est-il un cas où c'est utile ou c'est juste parce que le compilateur ne peut pas faire la différence entre une déclaration de fonction (uniquement des types requis) et une définition (complètement spécifié) jusqu'à ce que la ligne a été traitée?