Ansonsten musst du beim Aufruf eigentlich auch den Templateparameter angeben also:

int array[200];
bubblesort<int>(array,200);

Es kann sein, dass der Compiler eine autodetection davon machen kann, in der Regel ist aber nicht davon auszugehen.

PS. ich würde T nehmen für den template Typ, das ist man meiner Ansicht nach eher gewohnt. Sonst denkt man wie es hier geschehen ist dass es ein define ist.

Btw. außerdem. Du könntest schauen wie viel overhead std::arrray hat. Das hätte an dieser Stelle den Vorteil, dass man sich den length Parameter spart und man dadurch ein bisschen mehr Fehlersicherheit bezüglich des Aufrufs hat.