@ -496,113 +496,161 @@
///////////////////////////////////////////////////////////////////////////////////
// Has of C++ features
# ifndef __has_include
# define __has_include(x) 0 // Compatibility with non-clang compilers.
# endif
# ifndef __has_feature
# define __has_feature(x) 0 // Compatibility with non-clang compilers.
# endif
# ifndef __has_extension
# define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
# endif
// http://clang.llvm.org/cxx_status.html
// http://gcc.gnu.org/projects/cxx0x.html
// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
// N1720
# define GLM_HAS_CXX11_STL !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ((GLM_PLATFORM != GLM_PLATFORM_ANDROID) && (\
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC48 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) | | \
__has_include ( " __config " ) ) )
# if GLM_PLATFORM != GLM_PLATFORM_ANDROID
# define GLM_HAS_CXX11_STL 0
# elif GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_INTEL)
# define GLM_HAS_CXX11_STL __has_include("__config")
# else
# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && \
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC48 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# endif
// N1720
# define GLM_HAS_STATIC_ASSERT !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2010 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) | | \
__has_feature ( cxx_static_assert ) )
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_STATIC_ASSERT 1
# else
# define GLM_HAS_STATIC_ASSERT (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2010 ) ) )
# endif
// N1988
# define GLM_HAS_EXTENDED_INTEGER_TYPE !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2012 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_LLVM ) & & ( GLM_COMPILER > = GLM_COMPILER_LLVM30 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_APPLE_CLANG ) & & ( GLM_COMPILER > = GLM_COMPILER_APPLE_CLANG40 ) ) )
# if GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_EXTENDED_INTEGER_TYPE 1
# else
# define GLM_HAS_EXTENDED_INTEGER_TYPE (\
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2012 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_LLVM ) & & ( GLM_COMPILER > = GLM_COMPILER_LLVM30 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_APPLE_CLANG ) & & ( GLM_COMPILER > = GLM_COMPILER_APPLE_CLANG40 ) ) )
# endif
// N2235
# define GLM_HAS_CONSTEXPR !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC46 ) ) | | \
__has_feature ( cxx_constexpr ) )
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_CONSTEXPR __has_feature(cxx_constexpr)
# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_CONSTEXPR 1
# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR
# else
# define GLM_HAS_CONSTEXPR (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC46 ) ) )
# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015))
# endif
// N2672
# define GLM_HAS_INITIALIZER_LISTS !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC44 ) ) | | \
__has_feature ( cxx_generalized_initializers ) )
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_INITIALIZER_LISTS 1
# else
# define GLM_HAS_INITIALIZER_LISTS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC44 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# endif
// N2544 Unrestricted unions
# define GLM_HAS_UNRESTRICTED_UNIONS !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( GLM_LANG & GLM_LANG_CXXMS_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC46 ) ) | | \
__has_feature ( cxx_unrestricted_unions ) )
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)
# elif GLM_LANG & (GLM_LANG_CXX11_FLAG | GLM_LANG_CXXMS_FLAG)
# define GLM_HAS_UNRESTRICTED_UNIONS 1
# else
# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC46 ) ) )
# endif
// N2346
# define GLM_HAS_DEFAULTED_FUNCTIONS !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC44 ) ) | | \
__has_feature ( cxx_defaulted_functions ) )
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_DEFAULTED_FUNCTIONS 1
# else
# define GLM_HAS_DEFAULTED_FUNCTIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC44 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# endif
// N2118
# define GLM_HAS_RVALUE_REFERENCES !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2012 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) | | \
__has_feature ( cxx_rvalue_references ) )
// N2437
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_INTEL ) & & ( GLM_COMPILER > = GLM_COMPILER_INTEL14 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC45 ) ) | | \
__has_feature ( cxx_explicit_conversions ) )
# define GLM_HAS_STL_ARRAY !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2010 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) )
# define GLM_HAS_TEMPLATE_ALIASES !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) ) | | \
__has_feature ( cxx_alias_templates ) )
# define GLM_HAS_RANGE_FOR !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2012 ) ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC46 ) ) | | \
__has_feature ( cxx_range_for ) )
# define GLM_HAS_ASSIGNABLE !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
( ( GLM_LANG & GLM_LANG_CXX0X_FLAG ) & & ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC49 ) ) )
# define GLM_HAS_TRIVIAL_QUERIES !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_RVALUE_REFERENCES 1
# else
# define GLM_HAS_RVALUE_REFERENCES (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC43 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2012 ) ) )
# endif
# define GLM_HAS_MAKE_SIGNED !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && ( \
( GLM_LANG & GLM_LANG_CXX11_FLAG ) | | \
// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1
# else
# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC45 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_INTEL ) & & ( GLM_COMPILER > = GLM_COMPILER_INTEL14 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# endif
// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_TEMPLATE_ALIASES 1
# else
# define GLM_HAS_TEMPLATE_ALIASES (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_INTEL ) & & ( GLM_COMPILER > = GLM_COMPILER_INTEL12_1 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC47 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# endif
// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
# if GLM_COMPILER & (GLM_COMPILER_LLVM | GLM_COMPILER_APPLE_CLANG)
# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)
# elif GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_RANGE_FOR 1
# else
# define GLM_HAS_RANGE_FOR (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC46 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_INTEL ) & & ( GLM_COMPILER > = GLM_COMPILER_INTEL13 ) ) | | \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2012 ) ) )
# endif
//
# if GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_ASSIGNABLE 1
# else
# define GLM_HAS_ASSIGNABLE (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_GCC ) & & ( GLM_COMPILER > = GLM_COMPILER_GCC49 ) ) )
# endif
//
# define GLM_HAS_TRIVIAL_QUERIES ( \
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# define GLM_HAS_BITSCAN_WINDOWS ( \
( GLM_ARCH ! = GLM_ARCH_PURE ) & & \
( GLM_PLATFORM & GLM_PLATFORM_WINDOWS ) & & \
( GLM_COMPILER & ( GLM_COMPILER_VC | GLM_COMPILER_LLVM | GLM_COMPILER_INTEL ) ) )
//
# if GLM_LANG & GLM_LANG_CXX11_FLAG
# define GLM_HAS_MAKE_SIGNED 1
# else
# define GLM_HAS_MAKE_SIGNED (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
( ( GLM_COMPILER & GLM_COMPILER_VC ) & & ( GLM_COMPILER > = GLM_COMPILER_VC2013 ) ) )
# endif
//
# if GLM_ARCH == GLM_ARCH_PURE
# define GLM_HAS_BITSCAN_WINDOWS 0
# else
# define GLM_HAS_BITSCAN_WINDOWS (GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\
( GLM_COMPILER & ( GLM_COMPILER_VC | GLM_COMPILER_LLVM | GLM_COMPILER_INTEL ) )
# endif
// OpenMP
# ifdef _OPENMP
@ -624,7 +672,7 @@
# endif
// Not standard
# define GLM_HAS_ANONYMOUS_UNION !defined(GLM_FORCE_CXX98) && !defined(GLM_FORCE_CXX03) && (GLM_LANG & GLM_LANG_CXXMS_FLAG)
# define GLM_HAS_ANONYMOUS_UNION (GLM_LANG & GLM_LANG_CXXMS_FLAG)
///////////////////////////////////////////////////////////////////////////////////
// Platform
@ -885,6 +933,29 @@ namespace detail
# endif
# endif //GLM_MESSAGE
///////////////////////////////////////////////////////////////////////////////////
// countof
# ifndef __has_feature
# define __has_feature(x) 0 // Compatibility with non-clang compilers.
# endif
# if GLM_HAS_CONSTEXPR_PARTIAL
namespace glm
{
template < typename T , std : : size_t N >
constexpr std : : size_t countof ( T const ( & ) [ N ] )
{
return N ;
}
} //namespace glm
# define GLM_COUNTOF(arr) glm::countof(arr)
# elif _MSC_VER
# define GLM_COUNTOF(arr) _countof(arr)
# else
# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])
# endif
///////////////////////////////////////////////////////////////////////////////////
// Uninitialize constructors