If your compiler knows about parameters before it has parsed them, it is a magical unicorn and you should feed it daily. In other words, it's non-standard and you got lucky, and you shouldn't rely on it because it won't work for everyone else.
Ah yes - if you never use a template, the compiler never plugs in the types to it. Templates are literally "templates" - you tell the compiler what types you want it to work with and it uses the definition as a template to generate a function that works with those types. Thus, obviously, not asking the baker to make brown cookies means the baker doesn't make brown cookies, which also means the baker never finds out you spilled all his brown coloring.
1>c:\users\anmol\documents\visual studio 2012\projects\tests\tests\tests.cpp(14): error C2784: ''unknown-type' f(T1 [],T2 [],size_t)' : could not deduce template argument for 'T1 []' from 'int'