[bobafet]''s method won''t do anything for you, since structs are classes. You can use typename and class interchangeably.
In MSVC, you never instantiate a template function by inserting the type after the function name, ie, uou never do this:
function<type_class>(arg_list);
As Magmai said, you must have at least one parameter in the argument list that is of the instantiation type, from which the compiler will deduce the appropriate template class. Rather unfortunate.
So it''s back to the design board for you...
I''m not sure if you can determine from the object receiving a return value, essentially by declaring your template function to return the typename. To my mind, that would cause a lot of ambiguity. In any case, what are you trying to acheive; there may be a better or simpler way.