Don't use strlen in constexpr

This commit is contained in:
Victor Zverovich
2021-10-02 07:03:08 -07:00
parent 800d4c8ac8
commit 023c2018f7

View File

@@ -314,11 +314,13 @@ FMT_BEGIN_DETAIL_NAMESPACE
// (void)var does not work on many Intel compilers. // (void)var does not work on many Intel compilers.
template <typename... T> FMT_CONSTEXPR void ignore_unused(const T&...) {} template <typename... T> FMT_CONSTEXPR void ignore_unused(const T&...) {}
constexpr FMT_INLINE auto is_constant_evaluated() FMT_NOEXCEPT -> bool { constexpr FMT_INLINE auto is_constant_evaluated(bool default_value = false)
FMT_NOEXCEPT -> bool {
#ifdef __cpp_lib_is_constant_evaluated #ifdef __cpp_lib_is_constant_evaluated
ignore_unused(default_value);
return std::is_constant_evaluated(); return std::is_constant_evaluated();
#else #else
return false; return default_value;
#endif #endif
} }
@@ -426,7 +428,7 @@ template <typename Char> class basic_string_view {
FMT_INLINE FMT_INLINE
basic_string_view(const Char* s) : data_(s) { basic_string_view(const Char* s) : data_(s) {
if (detail::const_check(std::is_same<Char, char>::value && if (detail::const_check(std::is_same<Char, char>::value &&
!detail::is_constant_evaluated())) !detail::is_constant_evaluated(true)))
size_ = std::strlen(reinterpret_cast<const char*>(s)); size_ = std::strlen(reinterpret_cast<const char*>(s));
else else
size_ = std::char_traits<Char>::length(s); size_ = std::char_traits<Char>::length(s);