|
|
@@ -336,18 +336,26 @@
|
|
|
#define GLM_LANG_CXX0X_FLAG (1 << 3)
|
|
|
#define GLM_LANG_CXX11_FLAG (1 << 4)
|
|
|
#define GLM_LANG_CXX1Y_FLAG (1 << 5)
|
|
|
-#define GLM_LANG_CXXMS_FLAG (1 << 6)
|
|
|
-#define GLM_LANG_CXXGNU_FLAG (1 << 7)
|
|
|
+#define GLM_LANG_CXX14_FLAG (1 << 6)
|
|
|
+#define GLM_LANG_CXX1Z_FLAG (1 << 7)
|
|
|
+#define GLM_LANG_CXXMS_FLAG (1 << 8)
|
|
|
+#define GLM_LANG_CXXGNU_FLAG (1 << 9)
|
|
|
|
|
|
#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
|
|
|
#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
|
|
|
#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
|
|
|
#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
|
|
|
#define GLM_LANG_CXX1Y (GLM_LANG_CXX11 | GLM_LANG_CXX1Y_FLAG)
|
|
|
+#define GLM_LANG_CXX14 (GLM_LANG_CXX1Y | GLM_LANG_CXX14_FLAG)
|
|
|
+#define GLM_LANG_CXX1Z (GLM_LANG_CXX14 | GLM_LANG_CXX1Z_FLAG)
|
|
|
#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
|
|
|
#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
|
|
|
|
|
|
-#if defined(GLM_FORCE_CXX1Y)
|
|
|
+#if defined(GLM_FORCE_CXX1Z)
|
|
|
+# define GLM_LANG GLM_LANG_CXX1Z
|
|
|
+#elif defined(GLM_FORCE_CXX14)
|
|
|
+# define GLM_LANG GLM_LANG_CXX14
|
|
|
+#elif defined(GLM_FORCE_CXX1Y)
|
|
|
# define GLM_LANG GLM_LANG_CXX1Y
|
|
|
#elif defined(GLM_FORCE_CXX11)
|
|
|
# define GLM_LANG GLM_LANG_CXX11
|
|
|
@@ -356,61 +364,95 @@
|
|
|
#elif defined(GLM_FORCE_CXX98)
|
|
|
# define GLM_LANG GLM_LANG_CXX98
|
|
|
#else
|
|
|
-# if __cplusplus >= 201103L
|
|
|
-# define GLM_LANG GLM_LANG_CXX11
|
|
|
-# elif GLM_COMPILER & GLM_COMPILER_CLANG
|
|
|
-# if(GLM_PLATFORM == GLM_PLATFORM_APPLE)
|
|
|
-# define GLM_DETAIL_MAJOR 1
|
|
|
-# else
|
|
|
-# define GLM_DETAIL_MAJOR 0
|
|
|
-# endif
|
|
|
-# if __clang_major__ < (2 + GLM_DETAIL_MAJOR)
|
|
|
-# define GLM_LANG GLM_LANG_CXX
|
|
|
-# elif __has_feature(cxx_auto_type)
|
|
|
+# if GLM_COMPILER & (GLM_COMPILER_APPLE_CLANG | GLM_COMPILER_LLVM)
|
|
|
+# if __cplusplus >= 201402L // GLM_COMPILER_LLVM34 + -std=c++14
|
|
|
+# define GLM_LANG GLM_LANG_CXX14
|
|
|
+# elif __has_feature(cxx_decltype_auto) && __has_feature(cxx_aggregate_nsdmi) // GLM_COMPILER_LLVM33 + -std=c++1y
|
|
|
+# define GLM_LANG GLM_LANG_CXX1Y
|
|
|
+# elif __cplusplus >= 201103L // GLM_COMPILER_LLVM33 + -std=c++11
|
|
|
+# define GLM_LANG GLM_LANG_CXX11
|
|
|
+# elif __has_feature(cxx_static_assert) // GLM_COMPILER_LLVM29 + -std=c++11
|
|
|
# define GLM_LANG GLM_LANG_CXX0X
|
|
|
-# else
|
|
|
+# elif __cplusplus >= 199711L
|
|
|
# define GLM_LANG GLM_LANG_CXX98
|
|
|
+# else
|
|
|
+# define GLM_LANG GLM_LANG_CXX
|
|
|
# endif
|
|
|
# elif GLM_COMPILER & GLM_COMPILER_GCC
|
|
|
-# ifdef __GXX_EXPERIMENTAL_CXX0X__
|
|
|
+# if __cplusplus >= 201402L
|
|
|
+# define GLM_LANG GLM_LANG_CXX14
|
|
|
+# elif __cplusplus >= 201103L
|
|
|
+# define GLM_LANG GLM_LANG_CXX11
|
|
|
+# elif defined(__GXX_EXPERIMENTAL_CXX0X__)
|
|
|
# define GLM_LANG GLM_LANG_CXX0X
|
|
|
# else
|
|
|
# define GLM_LANG GLM_LANG_CXX98
|
|
|
# endif
|
|
|
# elif GLM_COMPILER & GLM_COMPILER_VC
|
|
|
# ifdef _MSC_EXTENSIONS
|
|
|
-# if GLM_COMPILER >= GLM_COMPILER_VC2010
|
|
|
+# if __cplusplus >= 201402L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif GLM_COMPILER >= GLM_COMPILER_VC2015
|
|
|
+# define GLM_LANG (GLM_LANG_CXX1Y | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif __cplusplus >= 201103L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif GLM_COMPILER >= GLM_COMPILER_VC2010
|
|
|
# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
|
|
|
-# else
|
|
|
+# elif __cplusplus >= 199711L
|
|
|
# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# else
|
|
|
+# define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG)
|
|
|
# endif
|
|
|
# else
|
|
|
-# if GLM_COMPILER >= GLM_COMPILER_VC2010
|
|
|
+# if __cplusplus >= 201402L
|
|
|
+# define GLM_LANG GLM_LANG_CXX14
|
|
|
+# elif GLM_COMPILER >= GLM_COMPILER_VC2015
|
|
|
+# define GLM_LANG GLM_LANG_CXX1Y
|
|
|
+# elif __cplusplus >= 201103L
|
|
|
+# define GLM_LANG GLM_LANG_CXX11
|
|
|
+# elif GLM_COMPILER >= GLM_COMPILER_VC2010
|
|
|
# define GLM_LANG GLM_LANG_CXX0X
|
|
|
-# else
|
|
|
+# elif __cplusplus >= 199711L
|
|
|
# define GLM_LANG GLM_LANG_CXX98
|
|
|
+# else
|
|
|
+# define GLM_LANG GLM_LANG_CXX
|
|
|
# endif
|
|
|
# endif
|
|
|
# elif GLM_COMPILER & GLM_COMPILER_INTEL
|
|
|
# ifdef _MSC_EXTENSIONS
|
|
|
-# if GLM_COMPILER >= GLM_COMPILER_INTEL13
|
|
|
+# if __cplusplus >= 201402L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif __cplusplus >= 201103L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif GLM_COMPILER >= GLM_COMPILER_INTEL13
|
|
|
# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
|
|
|
-# else
|
|
|
+# elif __cplusplus >= 199711L
|
|
|
# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# else
|
|
|
+# define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG)
|
|
|
# endif
|
|
|
# else
|
|
|
-# if GLM_COMPILER >= GLM_COMPILER_INTEL13
|
|
|
-# define GLM_LANG (GLM_LANG_CXX0X)
|
|
|
+# if __cplusplus >= 201402L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif __cplusplus >= 201103L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif GLM_COMPILER >= GLM_COMPILER_INTEL13
|
|
|
+# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
|
|
|
+# elif __cplusplus >= 199711L
|
|
|
+# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
|
|
|
# else
|
|
|
-# define GLM_LANG (GLM_LANG_CXX98)
|
|
|
+# define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG)
|
|
|
# endif
|
|
|
# endif
|
|
|
-# else
|
|
|
-# if __cplusplus >= 199711L
|
|
|
+# else // Unkown compiler
|
|
|
+# if __cplusplus >= 201402L
|
|
|
+# define GLM_LANG GLM_LANG_CXX14
|
|
|
+# elif __cplusplus >= 201103L
|
|
|
+# define GLM_LANG GLM_LANG_CXX11
|
|
|
+# elif __cplusplus >= 199711L
|
|
|
# define GLM_LANG GLM_LANG_CXX98
|
|
|
-# endif
|
|
|
-# ifndef GLM_FORCE_CXX98
|
|
|
-# define GLM_FORCE_CXX98
|
|
|
+# else
|
|
|
+# define GLM_LANG GLM_LANG_CXX // Good luck with that!
|
|
|
# endif
|
|
|
# ifndef GLM_FORCE_PURE
|
|
|
# define GLM_FORCE_PURE
|
|
|
@@ -441,6 +483,9 @@
|
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
|
// 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
|
|
|
@@ -453,17 +498,10 @@
|
|
|
// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
|
|
|
|
|
|
// N1720
|
|
|
-/*
|
|
|
-#if GLM_COMPILER & GLM_COMPILER_CLANG
|
|
|
-# define GLM_HAS_CXX11_STL (GLM_LANG & GLM_LANG_CXX11_FLAG) && __has_include(<__config>)
|
|
|
-#else
|
|
|
-# define GLM_HAS_CXX11_STL (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)
|
|
|
-#endif
|
|
|
-*/
|
|
|
#define GLM_HAS_CXX11_STL ((GLM_PLATFORM != GLM_PLATFORM_ANDROID) && (\
|
|
|
- (GLM_LANG & GLM_LANG_CXX11_FLAG) || \
|
|
|
((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_VC2015))))
|
|
|
+ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
|
|
|
+ __has_include(<__config>)))
|
|
|
|
|
|
// N1720
|
|
|
#define GLM_HAS_STATIC_ASSERT ( \
|
|
|
@@ -503,28 +541,28 @@
|
|
|
// N2346
|
|
|
#define GLM_HAS_DEFAULTED_FUNCTIONS ( \
|
|
|
(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_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))
|
|
|
|
|
|
// N2118
|
|
|
#define GLM_HAS_RVALUE_REFERENCES ( \
|
|
|
(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_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 ( \
|
|
|
(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_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 ( \
|
|
|
(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_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 ( \
|
|
|
@@ -533,7 +571,7 @@
|
|
|
|
|
|
#define GLM_HAS_RANGE_FOR ( \
|
|
|
(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_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))
|
|
|
|