>Which is the preferred syntax?
I prefer "typename T1", but Stroustrup prefers "class T1" (less typing).
>Are these equivalent?
I believe so.
>Can anything else besides "typename" or "class" be used?
Sort of. You could have...
template <class T, int Value>
...but that int Value doesn't have the same broad range of types that class (or typename) have.
HTH, --Eljay