diff options
Diffstat (limited to 'src/corelib/text/qanystringview.h')
-rw-r--r-- | src/corelib/text/qanystringview.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/corelib/text/qanystringview.h b/src/corelib/text/qanystringview.h index 61761c6a82..242efc6e5c 100644 --- a/src/corelib/text/qanystringview.h +++ b/src/corelib/text/qanystringview.h @@ -109,9 +109,11 @@ private: } template <typename Char, size_t N> - static constexpr qsizetype lengthHelperContainer(const Char (&)[N]) noexcept + static constexpr qsizetype lengthHelperContainer(const Char (&str)[N]) noexcept { - return qsizetype(N - 1); + const auto it = std::char_traits<Char>::find(str, N, Char(0)); + const auto end = it ? it : std::next(str, N); + return qsizetype(std::distance(str, end)); } static QChar toQChar(char ch) noexcept { return toQChar(QLatin1Char{ch}); } // we don't handle UTF-8 multibytes @@ -180,6 +182,10 @@ public: constexpr QAnyStringView(QBasicUtf8StringView<UseChar8T> v) noexcept : QAnyStringView(std::data(v), lengthHelperContainer(v)) {} + template <typename Char, size_t Size, if_compatible_char<Char> = true> + [[nodiscard]] constexpr static QAnyStringView fromArray(const Char (&string)[Size]) noexcept + { return QAnyStringView(string, Size); } + // defined in qstring.h: template <typename Visitor> inline constexpr decltype(auto) visit(Visitor &&v) const; |