What is the matter, that the template parameters for the function template can either be explicitly set, or they can be deduced from the arguments passed to the function.
fn, Class<1>::operator<<() . : fn<1> ( , ). , , fn , T Class<1>::operator() (.. Fn < 1 > ).
, fn . fn < 2 > Class < 1 > :: operator < (lt)(). :
Class<1> << fn<2>; // fn<2> is not fn<1>
Class<1> << fn<1>; // OK too, of course
Class<1> << fn; // error! fn<?>