forked from fmtlib/fmt
Don't use strlen in constexpr
This commit is contained in:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user