// composite types
 
-template<>
 template<class T, glm::precision P>
 struct gl_traits<TVEC1<T, P>> {
        static constexpr GLint size = 1;
 template<class T, glm::precision P>
 constexpr GLenum gl_traits<TVEC1<T, P>>::type;
 
-template<>
 template<class T, glm::precision P>
 struct gl_traits<TVEC2<T, P>> {
        static constexpr GLint size = 2;
 template<class T, glm::precision P>
 constexpr GLenum gl_traits<TVEC2<T, P>>::type;
 
-template<>
 template<class T, glm::precision P>
 struct gl_traits<TVEC3<T, P>> {
        static constexpr GLint size = 3;
 template<class T, glm::precision P>
 constexpr GLenum gl_traits<TVEC3<T, P>>::type;
 
-template<>
 template<class T, glm::precision P>
 struct gl_traits<TVEC4<T, P>> {
        static constexpr GLint size = 4;