13 #include "../gtx/quaternion.hpp"
15 #ifdef __cpp_structured_bindings
16 #if __cpp_structured_bindings >= 201606L
20 template<glm::length_t L,
typename T,glm::qualifier Q>
21 struct tuple_size<glm::vec<L, T, Q>> {
22 static constexpr
size_t value = L;
24 template<glm::length_t C,glm::length_t R,
typename T, glm::qualifier Q>
25 struct tuple_size<glm::mat<C,R, T, Q>> {
26 static constexpr
size_t value = C;
28 template<
typename T, glm::qualifier Q>
29 struct tuple_size<glm::qua<T, Q>> {
30 static constexpr
size_t value = 4;
32 template<std::
size_t I,glm::length_t L,
typename T,glm::qualifier Q>
33 struct tuple_element<I, glm::vec<L,T,Q>>
35 GLM_STATIC_ASSERT(I < L,
"Index out of bounds");
38 template<std::
size_t I, glm::length_t C, glm::length_t R,
typename T, glm::qualifier Q>
39 struct tuple_element<I, glm::mat<C,R, T, Q>>
41 GLM_STATIC_ASSERT(I < C,
"Index out of bounds");
42 typedef glm::vec<R,T,Q> type;
44 template<std::
size_t I,
typename T, glm::qualifier Q>
45 struct tuple_element<I, glm::qua<T, Q>>
47 GLM_STATIC_ASSERT(I < 4,
"Index out of bounds");
55 #ifndef GLM_ENABLE_EXPERIMENTAL
56 # error "GLM: GLM_GTX_iteration is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
57 #elif GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
58 # pragma message("GLM: GLM_GTX_io extension included")
66 template<length_t I, length_t L,
typename T, qualifier Q>
67 GLM_FUNC_DECL GLM_CONSTEXPR T& get(vec<L, T, Q>& v);
68 template<length_t I, length_t L,
typename T, qualifier Q>
69 GLM_FUNC_DECL GLM_CONSTEXPR T
const& get(vec<L, T, Q>
const& v);
71 template<length_t I, length_t C, length_t R,
typename T, qualifier Q>
72 GLM_FUNC_DECL GLM_CONSTEXPR vec<R, T, Q>& get(mat<C, R, T, Q>& m);
73 template<length_t I, length_t C, length_t R,
typename T, qualifier Q>
74 GLM_FUNC_DECL GLM_CONSTEXPR vec<R, T, Q>
const& get(mat<C, R, T, Q>
const& m);
76 template<length_t I,
typename T, qualifier Q>
77 GLM_FUNC_DECL GLM_CONSTEXPR T& get(qua<T, Q>& q);
78 template<length_t I,
typename T, qualifier Q>
79 GLM_FUNC_DECL GLM_CONSTEXPR T
const& get(qua<T, Q>
const& q);
81 #if GLM_HAS_RVALUE_REFERENCES
82 template<length_t I, length_t L,
typename T, qualifier Q>
83 GLM_FUNC_DECL GLM_CONSTEXPR T get(vec<L,T, Q>
const&& v);
84 template<length_t I,length_t C,length_t R,
typename T, qualifier Q>
85 GLM_FUNC_DECL GLM_CONSTEXPR vec<R,T,Q> get(mat<C,R,T, Q>
const&& m);
86 template<length_t I,
typename T, qualifier Q>
87 GLM_FUNC_DECL GLM_CONSTEXPR T get(qua<T, Q>
const&& q);
92 #include "structured_bindings.inl"