To będzie kompilować (cały kod jest gramatically ważne), ale nie powiedzie się na etapie połączenia.
To dlatego template <int T> void f();
jest zadeklarowany ale nie zdefiniowana, < 0> specjalizacja jest zdefiniowane, ale sprawia, że nie ma szans na Ciebie, ponieważ nie jesteś uruchamianiu go.
Właściwie to byłoby mieć możliwość < 0> specjalizacja zawierać błędy składniowe i program by jeszcze skompilować bez błędów! Wynika to z faktu, że formalnie szablony są kompilowane tylko wtedy, gdy są używane. (I nie spodziewałbym kandydatem mieć przytomność umysłu w warunkach wywiadu wskazują, że obecnie).
Łączenie błąd, trzeba 'szablon void f() {}' –
P0W