|
160 | 160 | #ifdef __has_include |
161 | 161 | #if __has_include(<version>) |
162 | 162 | #include <version> |
163 | | - |
164 | | - // Check if we can use std::is_constant_evaluated. |
165 | | - #ifdef __cpp_lib_is_constant_evaluated |
166 | | - #include <type_traits> |
167 | | - #define LIBASSERT_HAS_IS_CONSTANT_EVALUATED |
168 | | - #endif |
169 | | - |
170 | | - // Check if we can use std::format. |
171 | 163 | #if !defined(LIBASSERT_NO_STD_FORMAT) && __has_include(<format>) && defined(__cpp_lib_format) |
172 | 164 | #define LIBASSERT_USE_STD_FORMAT |
173 | 165 | #endif |
174 | 166 | #endif |
175 | 167 | #endif |
176 | 168 |
|
177 | | -// Check if we have the builtin __builtin_is_constant_evaluated. |
178 | | -#ifdef __has_builtin |
179 | | - #if __has_builtin(__builtin_is_constant_evaluated) |
180 | | - #define LIBASSERT_HAS_BUILTIN_IS_CONSTANT_EVALUATED |
181 | | - #endif |
182 | | -#endif |
183 | | - |
184 | | -// GCC 9.1+ and later has __builtin_is_constant_evaluated |
185 | | -#if defined(__GNUC__) && __GNUC__ >= 9 && !defined(LIBASSERT_HAS_BUILTIN_IS_CONSTANT_EVALUATED) |
186 | | - #define LIBASSERT_HAS_BUILTIN_IS_CONSTANT_EVALUATED |
187 | | -#endif |
188 | | - |
189 | | -// Visual Studio 2019 (19.25) and later supports __builtin_is_constant_evaluated |
190 | | -#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 192528326 |
191 | | - #define LIBASSERT_HAS_BUILTIN_IS_CONSTANT_EVALUATED |
192 | | -#endif |
193 | | - |
194 | | -LIBASSERT_BEGIN_NAMESPACE |
195 | | -namespace detail { |
196 | | - // Note: Works with >=C++20 and with C++17 for GCC 9.1+, Clang 9+, and MSVC 19.25+. |
197 | | - constexpr bool is_constant_evaluated() noexcept { |
198 | | - #if defined(LIBASSERT_HAS_IS_CONSTANT_EVALUATED) |
199 | | - return std::is_constant_evaluated(); |
200 | | - #elif defined(LIBASSERT_HAS_BUILTIN_IS_CONSTANT_EVALUATED) |
201 | | - return __builtin_is_constant_evaluated(); |
202 | | - #else |
203 | | - return false; |
204 | | - #endif |
205 | | - } |
206 | | -} |
207 | | -LIBASSERT_END_NAMESPACE |
208 | | - |
209 | 169 | #if LIBASSERT_IS_CLANG || LIBASSERT_IS_GCC |
210 | 170 | #if LIBASSERT_IS_GCC |
211 | 171 | #define LIBASSERT_WARNING_PRAGMA_PUSH_GCC _Pragma("GCC diagnostic push") |
|
0 commit comments