|
|
@@ -535,11 +535,14 @@
|
|
|
// N2235
|
|
|
#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
|
|
|
@@ -930,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
|
|
|
|