Does C++ allow a template to be defined like "struct structname<..>"?
Yes, C++ has this syntax. It's defining a partial template specialization. So there is a primary _STL_UNARY_FUNCTION_ERROR template, that is defined somewhat like this:
template <class _Func, typename _Type, class _Arg>
struct _STL_UNARY_FUNCTION_ERROR {
  // ...
};
And the one you quoted gives a specialized version of it. When _Type is void, the resulting class will be defined (according to the remaining two parameters) as the one you have in your question.
In the above example, what is the use of "<_Func, void, _Arg>"?
It specifies the arguments which will make this specialization be chosen when the template is instantiated. So whenever the second type is void, this is how the class will look.
If we delete "<_Func, void, _Arg>", does it affect anything?
Yes. This will make the above a redefinition of the template. And the compiler is required to reject it. The effect is that your program is now ill-formed.