From ce1448a903f3065ab5fb2683fbbb757af3c0dff1 Mon Sep 17 00:00:00 2001 From: Tr1NgleDev <77019520+Tr1NgleDev@users.noreply.github.com> Date: Fri, 1 Nov 2024 20:36:36 +0800 Subject: [PATCH] fix constexpr ig --- glm/detail/type_vec2.inl | 46 ++++++++++++++++++++++++++++++++++ glm/detail/type_vec3.inl | 49 ++++++++++++++++++++++++++++++++++++ glm/detail/type_vec4.inl | 54 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 149 insertions(+) diff --git a/glm/detail/type_vec2.inl b/glm/detail/type_vec2.inl index af3c68aa..47709a03 100644 --- a/glm/detail/type_vec2.inl +++ b/glm/detail/type_vec2.inl @@ -106,14 +106,60 @@ namespace glm GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) { GLM_ASSERT_LENGTH(i, this->length()); + +# if GLM_LANG & GLM_LANG_CXX14_FLAG || GLM_LANG & GLM_LANG_CXX17_FLAG +# if GLM_LANG & GLM_LANG_CXX20_FLAG + if (std::is_constant_evaluated()) + { +# endif + switch (i) + { + default: + case 0: + return x; + case 1: + return y; + } +# if GLM_LANG & GLM_LANG_CXX20_FLAG + } + else + { + return (&x)[i]; + } +# endif +# else return (&x)[i]; +# endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const { GLM_ASSERT_LENGTH(i, this->length()); + +# if GLM_LANG & GLM_LANG_CXX14_FLAG || GLM_LANG & GLM_LANG_CXX17_FLAG +# if GLM_LANG & GLM_LANG_CXX20_FLAG + if (std::is_constant_evaluated()) + { +# endif + switch (i) + { + default: + case 0: + return x; + case 1: + return y; + } +# if GLM_LANG & GLM_LANG_CXX20_FLAG + } + else + { + return (&x)[i]; + } +# endif +# else return (&x)[i]; +# endif } // -- Unary arithmetic operators -- diff --git a/glm/detail/type_vec3.inl b/glm/detail/type_vec3.inl index ec415164..531cd61b 100644 --- a/glm/detail/type_vec3.inl +++ b/glm/detail/type_vec3.inl @@ -171,14 +171,63 @@ namespace glm GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) { GLM_ASSERT_LENGTH(i, this->length()); +# if GLM_LANG & GLM_LANG_CXX14_FLAG || GLM_LANG & GLM_LANG_CXX17_FLAG +# if GLM_LANG & GLM_LANG_CXX20_FLAG + if (std::is_constant_evaluated()) + { +# endif + switch (i) + { + default: + case 0: + return x; + case 1: + return y; + case 2: + return z; + } +# if GLM_LANG & GLM_LANG_CXX20_FLAG + } + else + { + return (&x)[i]; + } +# endif +# else return (&x)[i]; +# endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const { GLM_ASSERT_LENGTH(i, this->length()); + +# if GLM_LANG & GLM_LANG_CXX14_FLAG || GLM_LANG & GLM_LANG_CXX17_FLAG +# if GLM_LANG & GLM_LANG_CXX20_FLAG + if (std::is_constant_evaluated()) + { +# endif + switch (i) + { + default: + case 0: + return x; + case 1: + return y; + case 2: + return z; + } +# if GLM_LANG & GLM_LANG_CXX20_FLAG + } + else + { + return (&x)[i]; + } +# endif +# else return (&x)[i]; +# endif } // -- Unary arithmetic operators -- diff --git a/glm/detail/type_vec4.inl b/glm/detail/type_vec4.inl index 78a9ce6d..44f827b9 100644 --- a/glm/detail/type_vec4.inl +++ b/glm/detail/type_vec4.inl @@ -362,14 +362,68 @@ namespace detail GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) { GLM_ASSERT_LENGTH(i, this->length()); + +# if GLM_LANG & GLM_LANG_CXX14_FLAG || GLM_LANG & GLM_LANG_CXX17_FLAG +# if GLM_LANG & GLM_LANG_CXX20_FLAG + if (std::is_constant_evaluated()) + { +# endif + switch (i) + { + default: + case 0: + return x; + case 1: + return y; + case 2: + return z; + case 3: + return w; + } +# if GLM_LANG & GLM_LANG_CXX20_FLAG + } + else + { + return (&x)[i]; + } +# endif +# else return (&x)[i]; +# endif } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const { GLM_ASSERT_LENGTH(i, this->length()); + +# if GLM_LANG & GLM_LANG_CXX14_FLAG || GLM_LANG & GLM_LANG_CXX17_FLAG +# if GLM_LANG & GLM_LANG_CXX20_FLAG + if (std::is_constant_evaluated()) + { +# endif + switch (i) + { + default: + case 0: + return x; + case 1: + return y; + case 2: + return z; + case 3: + return w; + } +# if GLM_LANG & GLM_LANG_CXX20_FLAG + } + else + { + return (&x)[i]; + } +# endif +# else return (&x)[i]; +# endif } // -- Unary arithmetic operators --