Es könnte eigentlich nur noch sein, dass der Compiler sich am static stört...

Dass die Warnung nicht immer erscheint liegt daran, dass der Compiler zunächst prüft, ob die Zwischenergebnisse von letzten Durchlauf noch aktuell sind. Dann werden immer nur die wirklich veränderten Dateien komplett neu übersetzt und vom Linker mit den schon übersetzten Teilen zusammengefügt. Bei größeren Projekten mit viel Code spart das einiges an Zeit.