* attribute for older standards we rely on compiler intrinsics when
* available.
*/
-#if defined(__clang__)
-# define DEAL_II_CXX23_ASSUME(expr) __builtin_assume(static_cast<bool>(expr))
-#elif defined(__GNUC__) && !defined(__ICC) && __GNUC__ >= 13
-# define DEAL_II_CXX23_ASSUME(expr) \
+#ifdef DEAL_II_HAVE_CXX23
+# define define DEAL_II_ASSUME(expr) [[assume(expr)]]
+#else
+# if defined(__clang__)
+# define DEAL_II_CXX23_ASSUME(expr) __builtin_assume(static_cast<bool>(expr))
+# elif defined(__GNUC__) && !defined(__ICC) && __GNUC__ >= 13
+# define DEAL_II_CXX23_ASSUME(expr) \
do \
{ \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic pop") \
} \
while (false)
-#elif defined(_MSC_VER) || defined(__ICC)
-# define DEAL_II_CXX23_ASSUME(expr) __assume(expr);
-#else
+# elif defined(_MSC_VER) || defined(__ICC)
+# define DEAL_II_CXX23_ASSUME(expr) __assume(expr);
+# else
/* no way with GCC to express this without evaluating 'expr' */
-# define DEAL_II_CXX23_ASSUME(expr) \
+# define DEAL_II_CXX23_ASSUME(expr) \
do \
{ \
} \
while (false)
+# endif
#endif
+
/**
* Macro indicating that the current feature will be removed in a future
* release.
} /*namespace deal_II_exceptions*/
+
/**
* A macro that serves as the main routine in the exception mechanism for debug
* mode error checking. It asserts that a certain condition is fulfilled,