// composite types
-template<>
template<class T, glm::precision P>
struct gl_traits<glm::tvec1<T, P>> {
static constexpr GLint size = 1;
template<class T, glm::precision P>
constexpr GLenum gl_traits<glm::tvec1<T, P>>::type;
-template<>
template<class T, glm::precision P>
struct gl_traits<glm::tvec2<T, P>> {
static constexpr GLint size = 2;
template<class T, glm::precision P>
constexpr GLenum gl_traits<glm::tvec2<T, P>>::type;
-template<>
template<class T, glm::precision P>
struct gl_traits<glm::tvec3<T, P>> {
static constexpr GLint size = 3;
template<class T, glm::precision P>
constexpr GLenum gl_traits<glm::tvec3<T, P>>::type;
-template<>
template<class T, glm::precision P>
struct gl_traits<glm::tvec4<T, P>> {
static constexpr GLint size = 4;