This defines a (primary) class template is_vector<T>
, and then partially specialises it for T = std::vector<U>
.
The general rule is fairly simple:
Primary template:
template <something here> class someName /*no angle barckets here */ { ... }
Partial specialisation:
template <something here> class someName<otherThing here> { ... }
Explicit specialisation:
template <> class someName<something here> { ... }
There is no short piece of the standard to cite, but you can refer to the subchapter C++11[temp.class.spec]
. There is nothing in that chapter that would restrict partial specialisations to pointers and references. Note that the MSDN link you gave does not limit its scope to them either; it says "such as" before the examples, which does not mean there are no other possibilities.