Especialización de plantillas: plantillas de C ++ que solo aceptan ciertos tipos (revisadas)

Quiero hacer una clase de plantilla de mensaje simple de la siguiente manera. Seguí la estructura textualmente de la respuesta elegida publicada aquí . Sin embargo, esto parece romperse en Visual Studio 2013.

template Message; template Message <std::vector> { public: }; template Message  { }; 

IntelliSense me dice que el Message is not a template .

Colocar la class antes del Message en la statement hacia adelante resulta en un error IntelliSense ligeramente mejor, pero igualmente molesto: expected and identifier después de la llave de apertura { de cada plantilla.

 template class Message; template Message <std::vector> { public: }; template Message  { }; 

Debo tener en cuenta que todo el código anterior se está colocando actualmente en un archivo de encabezado.

También debe incluir la palabra clave de class en la especialización de la plantilla. No sé por qué la respuesta vinculada no hace eso.

 template class Message; template<> class Message > { public: }; template<> class Message  { };