@ -113,7 +113,7 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)  
					 
					 
					 
							GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								return !compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(v1, v2);  
					 
					 
					 
								return !compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(v1, v2);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							}  
					 
					 
					 
							}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						};  
					 
					 
					 
						};  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -479,7 +479,7 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							assert(i >= 0 && i < this->length());  
					 
					 
					 
							assert(i >= 0 && i < this->length());  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							switch  (i)  
					 
					 
					 
							switch(i)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							default:  
					 
					 
					 
							default:  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							case 0:  
					 
					 
					 
							case 0:  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -497,7 +497,7 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							assert(i >= 0 && i < this->length());  
					 
					 
					 
							assert(i >= 0 && i < this->length());  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							switch  (i)  
					 
					 
					 
							switch(i)  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							{  
					 
					 
					 
							{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							default:  
					 
					 
					 
							default:  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							case 0:  
					 
					 
					 
							case 0:  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -540,84 +540,84 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_add<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_add<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_add<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
					 
					 
					 
							return (*this = detail::compute_vec4_add<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_add<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_add<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_sub<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_sub<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
					 
					 
					 
							return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_sub<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_sub<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_mul<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_mul<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
					 
					 
					 
							return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_mul<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_mul<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_div<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_div<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_div<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
					 
					 
					 
							return (*this = detail::compute_vec4_div<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v.x)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_div<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_div<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						// -- Increment and decrement operators --  
					 
					 
					 
						// -- Increment and decrement operators --  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -664,126 +664,126 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_mod<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_mod<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_mod<T, Q, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_mod<T, Q, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
					 
					 
					 
							return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(scalar)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename U>  
					 
					 
					 
						template<typename U>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
					 
					 
					 
							return (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(*this, vec<4, T, Q>(v)));  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						// -- Unary constant operators --  
					 
					 
					 
						// -- Unary constant operators --  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -1107,7 +1107,7 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return detail::compute_vec4_bitwise_not<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(v);  
					 
					 
					 
							return detail::compute_vec4_bitwise_not<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(v);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						// -- Boolean operators --  
					 
					 
					 
						// -- Boolean operators --  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -1115,13 +1115,13 @@ namespace detail 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return detail::compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(v1, v2);  
					 
					 
					 
							return detail::compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(v1, v2);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<typename T, qualifier Q>  
					 
					 
					 
						template<typename T, qualifier Q>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)  
					 
					 
					 
						GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						{  
					 
					 
					 
						{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return detail::compute_vec4_nequal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::use_sim d<Q>::value>::call(v1, v2);  
					 
					 
					 
							return detail::compute_vec4_nequal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligne d<Q>::value>::call(v1, v2);  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						}  
					 
					 
					 
						}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						template<qualifier Q>  
					 
					 
					 
						template<qualifier Q>