From d3643d9690d82733ae25000c789a113389d4f874 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 24 Sep 2020 12:19:45 +0200 Subject: Use c++20 when available at compile time Also std::end is constexpr where std::next sometimes isn't always with sanitizers active. Change-Id: Ibe4c11eb4945fb286247e841b6a7f6cc3ff1eaa6 Reviewed-by: Giuseppe D'Angelo --- src/corelib/text/qstringview.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/corelib/text/qstringview.h') diff --git a/src/corelib/text/qstringview.h b/src/corelib/text/qstringview.h index 86ffb3cc9e..d29e6be4f8 100644 --- a/src/corelib/text/qstringview.h +++ b/src/corelib/text/qstringview.h @@ -150,13 +150,12 @@ private: template static qsizetype lengthHelperPointer(const Char *str) noexcept { -#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) - if (__builtin_constant_p(*str)) { - qsizetype result = 0; - while (*str++) - ++result; - return result; - } +#if defined(__cpp_lib_is_constant_evaluated) + if (std::is_constant_evaluated()) + return std::char_traits::length(str); +#elif defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) + if (__builtin_constant_p(*str)) + return std::char_traits::length(str); #endif return QtPrivate::qustrlen(reinterpret_cast(str)); } @@ -175,7 +174,7 @@ private: static constexpr qsizetype lengthHelperContainer(const Char (&str)[N]) noexcept { const auto it = std::char_traits::find(str, N, Char(0)); - const auto end = it ? it : std::next(str, N); + const auto end = it ? it : std::end(str); return qsizetype(std::distance(str, end)); } -- cgit v1.2.3