// 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;