QtBase  v6.3.1
qstring.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2020 The Qt Company Ltd.
4 ** Copyright (C) 2019 Intel Corporation.
5 ** Copyright (C) 2019 Mail.ru Group.
6 ** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
7 ** Contact: https://www.qt.io/licensing/
8 **
9 ** This file is part of the QtCore module of the Qt Toolkit.
10 **
11 ** $QT_BEGIN_LICENSE:LGPL$
12 ** Commercial License Usage
13 ** Licensees holding valid commercial Qt licenses may use this file in
14 ** accordance with the commercial license agreement provided with the
15 ** Software or, alternatively, in accordance with the terms contained in
16 ** a written agreement between you and The Qt Company. For licensing terms
17 ** and conditions see https://www.qt.io/terms-conditions. For further
18 ** information use the contact form at https://www.qt.io/contact-us.
19 **
20 ** GNU Lesser General Public License Usage
21 ** Alternatively, this file may be used under the terms of the GNU Lesser
22 ** General Public License version 3 as published by the Free Software
23 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
24 ** packaging of this file. Please review the following information to
25 ** ensure the GNU Lesser General Public License version 3 requirements
26 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
27 **
28 ** GNU General Public License Usage
29 ** Alternatively, this file may be used under the terms of the GNU
30 ** General Public License version 2.0 or (at your option) the GNU General
31 ** Public license version 3 or any later version approved by the KDE Free
32 ** Qt Foundation. The licenses are as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
34 ** included in the packaging of this file. Please review the following
35 ** information to ensure the GNU General Public License requirements will
36 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
37 ** https://www.gnu.org/licenses/gpl-3.0.html.
38 **
39 ** $QT_END_LICENSE$
40 **
41 ****************************************************************************/
42 
43 #ifndef QSTRING_H
44 #define QSTRING_H
45 
46 #if defined(QT_NO_CAST_FROM_ASCII) && defined(QT_RESTRICTED_CAST_FROM_ASCII)
47 #error QT_NO_CAST_FROM_ASCII and QT_RESTRICTED_CAST_FROM_ASCII must not be defined at the same time
48 #endif
49 
50 #include <QtCore/qchar.h>
51 #include <QtCore/qbytearray.h>
52 #include <QtCore/qarraydata.h>
53 #include <QtCore/qnamespace.h>
54 #include <QtCore/qstringliteral.h>
55 #include <QtCore/qstringalgorithms.h>
56 #include <QtCore/qanystringview.h>
57 #include <QtCore/qstringtokenizer.h>
58 
59 #include <string>
60 #include <iterator>
61 
62 #include <stdarg.h>
63 
64 #ifdef truncate
65 #error qstring.h must be included before any header file that defines truncate
66 #endif
67 
68 #if defined(Q_OS_DARWIN) || defined(Q_QDOC)
71 #endif
72 
74 
75 class QRegularExpression;
77 class QString;
78 
79 namespace QtPrivate {
80 template <bool...B> class BoolList;
81 }
82 
84 {
85 public:
86  constexpr inline QLatin1String() noexcept : m_size(0), m_data(nullptr) {}
87  constexpr inline explicit QLatin1String(const char *s) noexcept : m_size(s ? qsizetype(strlen(s)) : 0), m_data(s) {}
88  constexpr explicit QLatin1String(const char *f, const char *l)
89  : QLatin1String(f, qsizetype(l - f)) {}
90  constexpr inline explicit QLatin1String(const char *s, qsizetype sz) noexcept : m_size(sz), m_data(s) {}
91  explicit QLatin1String(const QByteArray &s) noexcept : m_size(s.size()), m_data(s.constData()) {}
92  constexpr explicit QLatin1String(QByteArrayView s) noexcept : m_size(s.size()), m_data(s.data()) {}
93 
94  inline QString toString() const;
95 
96  constexpr const char *latin1() const noexcept { return m_data; }
97  constexpr qsizetype size() const noexcept { return m_size; }
98  constexpr const char *data() const noexcept { return m_data; }
99 
100  constexpr bool isNull() const noexcept { return !data(); }
101  constexpr bool isEmpty() const noexcept { return !size(); }
102 
103  template <typename...Args>
104  [[nodiscard]] inline QString arg(Args &&...args) const;
105 
106  [[nodiscard]] constexpr QLatin1Char at(qsizetype i) const
107  { return Q_ASSERT(i >= 0), Q_ASSERT(i < size()), QLatin1Char(m_data[i]); }
108  [[nodiscard]] constexpr QLatin1Char operator[](qsizetype i) const { return at(i); }
109 
110  [[nodiscard]] constexpr QLatin1Char front() const { return at(0); }
111  [[nodiscard]] constexpr QLatin1Char back() const { return at(size() - 1); }
112 
113  [[nodiscard]] int compare(QStringView other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
114  { return QtPrivate::compareStrings(*this, other, cs); }
115  [[nodiscard]] int compare(QLatin1String other, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
116  { return QtPrivate::compareStrings(*this, other, cs); }
117  [[nodiscard]] constexpr int compare(QChar c) const noexcept
118  { return isEmpty() ? -1 : front() == c ? int(size() > 1) : uchar(m_data[0]) - c.unicode(); }
119  [[nodiscard]] int compare(QChar c, Qt::CaseSensitivity cs) const noexcept
120  { return QtPrivate::compareStrings(*this, QStringView(&c, 1), cs); }
121 
122  [[nodiscard]] bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
123  { return QtPrivate::startsWith(*this, s, cs); }
124  [[nodiscard]] bool startsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
125  { return QtPrivate::startsWith(*this, s, cs); }
126  [[nodiscard]] constexpr bool startsWith(QChar c) const noexcept
127  { return !isEmpty() && front() == c; }
128  [[nodiscard]] inline bool startsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
129  { return QtPrivate::startsWith(*this, QStringView(&c, 1), cs); }
130 
131  [[nodiscard]] bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
132  { return QtPrivate::endsWith(*this, s, cs); }
133  [[nodiscard]] bool endsWith(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
134  { return QtPrivate::endsWith(*this, s, cs); }
135  [[nodiscard]] constexpr bool endsWith(QChar c) const noexcept
136  { return !isEmpty() && back() == c; }
137  [[nodiscard]] inline bool endsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
138  { return QtPrivate::endsWith(*this, QStringView(&c, 1), cs); }
139 
140  [[nodiscard]] qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
141  { return QtPrivate::findString(*this, from, s, cs); }
142  [[nodiscard]] qsizetype indexOf(QLatin1String s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
143  { return QtPrivate::findString(*this, from, s, cs); }
144  [[nodiscard]] qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
145  { return QtPrivate::findString(*this, from, QStringView(&c, 1), cs); }
146 
147  [[nodiscard]] bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
148  { return indexOf(s, 0, cs) != -1; }
149  [[nodiscard]] bool contains(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
150  { return indexOf(s, 0, cs) != -1; }
151  [[nodiscard]] inline bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
152  { return indexOf(QStringView(&c, 1), 0, cs) != -1; }
153 
155  { return lastIndexOf(s, size(), cs); }
157  { return QtPrivate::lastIndexOf(*this, from, s, cs); }
159  { return lastIndexOf(s, size(), cs); }
161  { return QtPrivate::lastIndexOf(*this, from, s, cs); }
162  [[nodiscard]] qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
163  { return lastIndexOf(c, -1, cs); }
164  [[nodiscard]] qsizetype lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
165  { return QtPrivate::lastIndexOf(*this, from, QStringView(&c, 1), cs); }
166 
167  using value_type = const char;
172  using difference_type = qsizetype; // violates Container concept requirements
173  using size_type = qsizetype; // violates Container concept requirements
174 
175  constexpr const_iterator begin() const noexcept { return data(); }
176  constexpr const_iterator cbegin() const noexcept { return data(); }
177  constexpr const_iterator end() const noexcept { return data() + size(); }
178  constexpr const_iterator cend() const noexcept { return data() + size(); }
179 
180  using reverse_iterator = std::reverse_iterator<iterator>;
182 
187 
188  [[nodiscard]] constexpr QLatin1String mid(qsizetype pos, qsizetype n = -1) const
189  {
190  using namespace QtPrivate;
191  auto result = QContainerImplHelper::mid(size(), &pos, &n);
193  }
194  [[nodiscard]] constexpr QLatin1String left(qsizetype n) const
195  {
196  if (size_t(n) >= size_t(size()))
197  n = size();
198  return QLatin1String(m_data, n);
199  }
200  [[nodiscard]] constexpr QLatin1String right(qsizetype n) const
201  {
202  if (size_t(n) >= size_t(size()))
203  n = size();
204  return QLatin1String(m_data + m_size - n, n);
205  }
206 
207  [[nodiscard]] constexpr QLatin1String sliced(qsizetype pos) const
208  { verify(pos); return QLatin1String(m_data + pos, m_size - pos); }
209  [[nodiscard]] constexpr QLatin1String sliced(qsizetype pos, qsizetype n) const
210  { verify(pos, n); return QLatin1String(m_data + pos, n); }
211  [[nodiscard]] constexpr QLatin1String first(qsizetype n) const
212  { verify(n); return QLatin1String(m_data, n); }
213  [[nodiscard]] constexpr QLatin1String last(qsizetype n) const
214  { verify(n); return QLatin1String(m_data + size() - n, n); }
215  [[nodiscard]] constexpr QLatin1String chopped(qsizetype n) const
216  { verify(n); return QLatin1String(m_data, size() - n); }
217 
218  constexpr void chop(qsizetype n)
219  { verify(n); m_size -= n; }
220  constexpr void truncate(qsizetype n)
221  { verify(n); m_size = n; }
222 
223  [[nodiscard]] QLatin1String trimmed() const noexcept { return QtPrivate::trimmed(*this); }
224 
225  template <typename Needle, typename...Flags>
226  [[nodiscard]] inline constexpr auto tokenize(Needle &&needle, Flags...flags) const
227  noexcept(noexcept(qTokenize(std::declval<const QLatin1String &>(), std::forward<Needle>(needle), flags...)))
228  -> decltype(qTokenize(*this, std::forward<Needle>(needle), flags...))
229  { return qTokenize(*this, std::forward<Needle>(needle), flags...); }
230 
231  friend inline bool operator==(QLatin1String s1, QLatin1String s2) noexcept
232  { return s1.size() == s2.size() && (!s1.size() || !memcmp(s1.latin1(), s2.latin1(), s1.size())); }
233  friend inline bool operator!=(QLatin1String s1, QLatin1String s2) noexcept
234  { return !(s1 == s2); }
235  friend inline bool operator<(QLatin1String s1, QLatin1String s2) noexcept
236  {
237  const qsizetype len = qMin(s1.size(), s2.size());
238  const int r = len ? memcmp(s1.latin1(), s2.latin1(), len) : 0;
239  return r < 0 || (r == 0 && s1.size() < s2.size());
240  }
241  friend inline bool operator>(QLatin1String s1, QLatin1String s2) noexcept
242  { return s2 < s1; }
243  friend inline bool operator<=(QLatin1String s1, QLatin1String s2) noexcept
244  { return !(s1 > s2); }
245  friend inline bool operator>=(QLatin1String s1, QLatin1String s2) noexcept
246  { return !(s1 < s2); }
247 
248  // QChar <> QLatin1String
249  friend inline bool operator==(QChar lhs, QLatin1String rhs) noexcept { return rhs.size() == 1 && lhs == rhs.front(); }
250  friend inline bool operator< (QChar lhs, QLatin1String rhs) noexcept { return compare_helper(&lhs, 1, rhs) < 0; }
251  friend inline bool operator> (QChar lhs, QLatin1String rhs) noexcept { return compare_helper(&lhs, 1, rhs) > 0; }
252  friend inline bool operator!=(QChar lhs, QLatin1String rhs) noexcept { return !(lhs == rhs); }
253  friend inline bool operator<=(QChar lhs, QLatin1String rhs) noexcept { return !(lhs > rhs); }
254  friend inline bool operator>=(QChar lhs, QLatin1String rhs) noexcept { return !(lhs < rhs); }
255 
256  friend inline bool operator==(QLatin1String lhs, QChar rhs) noexcept { return rhs == lhs; }
257  friend inline bool operator!=(QLatin1String lhs, QChar rhs) noexcept { return !(rhs == lhs); }
258  friend inline bool operator< (QLatin1String lhs, QChar rhs) noexcept { return rhs > lhs; }
259  friend inline bool operator> (QLatin1String lhs, QChar rhs) noexcept { return rhs < lhs; }
260  friend inline bool operator<=(QLatin1String lhs, QChar rhs) noexcept { return !(rhs < lhs); }
261  friend inline bool operator>=(QLatin1String lhs, QChar rhs) noexcept { return !(rhs > lhs); }
262 
263  // QStringView <> QLatin1String
264  friend inline bool operator==(QStringView lhs, QLatin1String rhs) noexcept
265  { return lhs.size() == rhs.size() && QtPrivate::equalStrings(lhs, rhs); }
266  friend inline bool operator!=(QStringView lhs, QLatin1String rhs) noexcept { return !(lhs == rhs); }
267  friend inline bool operator< (QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) < 0; }
268  friend inline bool operator<=(QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) <= 0; }
269  friend inline bool operator> (QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) > 0; }
270  friend inline bool operator>=(QStringView lhs, QLatin1String rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) >= 0; }
271 
272  friend inline bool operator==(QLatin1String lhs, QStringView rhs) noexcept
273  { return lhs.size() == rhs.size() && QtPrivate::equalStrings(lhs, rhs); }
274  friend inline bool operator!=(QLatin1String lhs, QStringView rhs) noexcept { return !(lhs == rhs); }
275  friend inline bool operator< (QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) < 0; }
276  friend inline bool operator<=(QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) <= 0; }
277  friend inline bool operator> (QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) > 0; }
278  friend inline bool operator>=(QLatin1String lhs, QStringView rhs) noexcept { return QtPrivate::compareStrings(lhs, rhs) >= 0; }
279 
280 
281 #if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
282  QT_ASCII_CAST_WARN inline bool operator==(const char *s) const;
283  QT_ASCII_CAST_WARN inline bool operator!=(const char *s) const;
284  QT_ASCII_CAST_WARN inline bool operator<(const char *s) const;
285  QT_ASCII_CAST_WARN inline bool operator>(const char *s) const;
286  QT_ASCII_CAST_WARN inline bool operator<=(const char *s) const;
287  QT_ASCII_CAST_WARN inline bool operator>=(const char *s) const;
288 
289  QT_ASCII_CAST_WARN inline bool operator==(const QByteArray &s) const;
290  QT_ASCII_CAST_WARN inline bool operator!=(const QByteArray &s) const;
291  QT_ASCII_CAST_WARN inline bool operator<(const QByteArray &s) const;
292  QT_ASCII_CAST_WARN inline bool operator>(const QByteArray &s) const;
293  QT_ASCII_CAST_WARN inline bool operator<=(const QByteArray &s) const;
294  QT_ASCII_CAST_WARN inline bool operator>=(const QByteArray &s) const;
295 
296  QT_ASCII_CAST_WARN friend bool operator==(const char *s1, QLatin1String s2) { return compare_helper(s2, s1) == 0; }
297  QT_ASCII_CAST_WARN friend bool operator!=(const char *s1, QLatin1String s2) { return compare_helper(s2, s1) != 0; }
298  QT_ASCII_CAST_WARN friend bool operator< (const char *s1, QLatin1String s2) { return compare_helper(s2, s1) > 0; }
299  QT_ASCII_CAST_WARN friend bool operator> (const char *s1, QLatin1String s2) { return compare_helper(s2, s1) < 0; }
300  QT_ASCII_CAST_WARN friend bool operator<=(const char *s1, QLatin1String s2) { return compare_helper(s2, s1) >= 0; }
301  QT_ASCII_CAST_WARN friend bool operator>=(const char *s1, QLatin1String s2) { return compare_helper(s2, s1) <= 0; }
302 #endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
303 
304 private:
305 #if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
306  static inline int compare_helper(const QLatin1String &s1, const char *s2);
307 #endif
308  Q_ALWAYS_INLINE constexpr void verify(qsizetype pos, qsizetype n = 0) const
309  {
310  Q_ASSERT(pos >= 0);
311  Q_ASSERT(pos <= size());
312  Q_ASSERT(n >= 0);
313  Q_ASSERT(n <= size() - pos);
314  }
315  Q_CORE_EXPORT static int compare_helper(const QChar *data1, qsizetype length1,
317  Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
318  qsizetype m_size;
319  const char *m_data;
320 };
322 
323 // Qt 4.x compatibility
324 
325 //
326 // QLatin1String inline implementations
327 //
328 constexpr bool QtPrivate::isLatin1(QLatin1String) noexcept
329 { return true; }
330 
331 //
332 // QStringView members that require QLatin1String:
333 //
335 { return QtPrivate::compareStrings(*this, s, cs); }
337 { return QtPrivate::startsWith(*this, s, cs); }
339 { return QtPrivate::endsWith(*this, s, cs); }
341 { return QtPrivate::findString(*this, from, s, cs); }
343 { return indexOf(s, 0, cs) != qsizetype(-1); }
345 { return QtPrivate::lastIndexOf(*this, size(), s, cs); }
347 { return QtPrivate::lastIndexOf(*this, from, s, cs); }
348 
349 //
350 // QAnyStringView members that require QLatin1String
351 //
352 
354  : m_data{str.data()}, m_size{size_t(str.size()) | Tag::Latin1} {}
355 
356 constexpr QLatin1String QAnyStringView::asLatin1StringView() const
357 {
358  Q_ASSERT(isLatin1());
359  return QLatin1String{m_data_utf8, size()};
360 }
361 
362 template <typename Visitor>
363 constexpr decltype(auto) QAnyStringView::visit(Visitor &&v) const
364 {
365  if (isUtf16())
366  return std::forward<Visitor>(v)(asStringView());
367  else if (isLatin1())
368  return std::forward<Visitor>(v)(asLatin1StringView());
369  else
370  return std::forward<Visitor>(v)(asUtf8StringView());
371 }
372 
373 //
374 // QAnyStringView members that require QAnyStringView::visit()
375 //
376 
377 constexpr QChar QAnyStringView::front() const
378 {
379  return visit([] (auto that) { return QAnyStringView::toQChar(that.front()); });
380 }
381 constexpr QChar QAnyStringView::back() const
382 {
383  return visit([] (auto that) { return QAnyStringView::toQChar(that.back()); });
384 }
385 
386 
387 class Q_CORE_EXPORT QString
388 {
390 public:
392 
393  inline constexpr QString() noexcept;
394  explicit QString(const QChar *unicode, qsizetype size = -1);
395  QString(QChar c);
398 #if defined(__cpp_char8_t) || defined(Q_CLANG_QDOC)
400  inline QString(const char8_t *str)
401  : QString(fromUtf8(str))
402  {}
403 #endif
404  inline QString(const QString &) noexcept;
405  inline ~QString();
406  QString &operator=(QChar c);
407  QString &operator=(const QString &) noexcept;
408  QString &operator=(QLatin1String latin1);
409  inline QString(QString &&other) noexcept
410  = default;
412  void swap(QString &other) noexcept { d.swap(other.d); }
413  inline qsizetype size() const { return d.size; }
414  inline qsizetype count() const { return d.size; }
415  inline qsizetype length() const { return d.size; }
416  inline bool isEmpty() const;
417  void resize(qsizetype size);
418  void resize(qsizetype size, QChar fillChar);
419 
420  QString &fill(QChar c, qsizetype size = -1);
421  void truncate(qsizetype pos);
422  void chop(qsizetype n);
423 
424  inline qsizetype capacity() const;
425  inline void reserve(qsizetype size);
426  inline void squeeze();
427 
428  inline const QChar *unicode() const;
429  inline QChar *data();
430  inline const QChar *data() const;
431  inline const QChar *constData() const;
432 
433  inline void detach();
434  inline bool isDetached() const;
435  inline bool isSharedWith(const QString &other) const { return d.isSharedWith(other.d); }
436  void clear();
437 
438  inline const QChar at(qsizetype i) const;
439  const QChar operator[](qsizetype i) const;
440  [[nodiscard]] QChar &operator[](qsizetype i);
441 
442  [[nodiscard]] inline QChar front() const { return at(0); }
443  [[nodiscard]] inline QChar &front();
444  [[nodiscard]] inline QChar back() const { return at(size() - 1); }
445  [[nodiscard]] inline QChar &back();
446 
447  [[nodiscard]] QString arg(qlonglong a, int fieldwidth=0, int base=10,
448  QChar fillChar = QLatin1Char(' ')) const;
449  [[nodiscard]] QString arg(qulonglong a, int fieldwidth=0, int base=10,
450  QChar fillChar = QLatin1Char(' ')) const;
451  [[nodiscard]] QString arg(long a, int fieldwidth=0, int base=10,
452  QChar fillChar = QLatin1Char(' ')) const;
453  [[nodiscard]] QString arg(ulong a, int fieldwidth=0, int base=10,
454  QChar fillChar = QLatin1Char(' ')) const;
455  [[nodiscard]] QString arg(int a, int fieldWidth = 0, int base = 10,
456  QChar fillChar = QLatin1Char(' ')) const;
457  [[nodiscard]] QString arg(uint a, int fieldWidth = 0, int base = 10,
458  QChar fillChar = QLatin1Char(' ')) const;
459  [[nodiscard]] QString arg(short a, int fieldWidth = 0, int base = 10,
460  QChar fillChar = QLatin1Char(' ')) const;
461  [[nodiscard]] QString arg(ushort a, int fieldWidth = 0, int base = 10,
462  QChar fillChar = QLatin1Char(' ')) const;
463  [[nodiscard]] QString arg(double a, int fieldWidth = 0, char format = 'g', int precision = -1,
464  QChar fillChar = QLatin1Char(' ')) const;
465  [[nodiscard]] QString arg(char a, int fieldWidth = 0,
466  QChar fillChar = QLatin1Char(' ')) const;
467  [[nodiscard]] QString arg(QChar a, int fieldWidth = 0,
468  QChar fillChar = QLatin1Char(' ')) const;
469 #if QT_STRINGVIEW_LEVEL < 2
470  [[nodiscard]] QString arg(const QString &a, int fieldWidth = 0,
471  QChar fillChar = QLatin1Char(' ')) const;
472 #endif
473  [[nodiscard]] QString arg(QStringView a, int fieldWidth = 0,
474  QChar fillChar = QLatin1Char(' ')) const;
475  [[nodiscard]] QString arg(QLatin1String a, int fieldWidth = 0,
476  QChar fillChar = QLatin1Char(' ')) const;
477 private:
478  template <typename T>
479  struct is_convertible_to_view_or_qstring_helper
480  : std::integral_constant<bool,
481  std::is_convertible<T, QString>::value ||
482  std::is_convertible<T, QStringView>::value ||
483  std::is_convertible<T, QLatin1String>::value> {};
484  template <typename T>
485  struct is_convertible_to_view_or_qstring
486  : is_convertible_to_view_or_qstring_helper<typename std::decay<T>::type> {};
487 public:
488  template <typename...Args>
489  [[nodiscard]]
490 #ifdef Q_CLANG_QDOC
491  QString
492 #else
493  typename std::enable_if<
494  sizeof...(Args) >= 2 && std::is_same<
497  >::value,
498  QString
499  >::type
500 #endif
501  arg(Args &&...args) const
502  { return qToStringViewIgnoringNull(*this).arg(std::forward<Args>(args)...); }
503 
504  static QString vasprintf(const char *format, va_list ap) Q_ATTRIBUTE_FORMAT_PRINTF(1, 0);
505  static QString asprintf(const char *format, ...) Q_ATTRIBUTE_FORMAT_PRINTF(1, 2);
506 
507  [[nodiscard]] qsizetype indexOf(QChar c, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
509 #if QT_STRINGVIEW_LEVEL < 2
510  [[nodiscard]] qsizetype indexOf(const QString &s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
511 #endif
512  [[nodiscard]] qsizetype indexOf(QStringView s, qsizetype from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
513  { return QtPrivate::findString(*this, from, s, cs); }
514  [[nodiscard]] qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
515  { return lastIndexOf(c, -1, cs); }
518  { return lastIndexOf(s, size(), cs); }
520 #if QT_STRINGVIEW_LEVEL < 2
522  { return lastIndexOf(s, size(), cs); }
523  [[nodiscard]] qsizetype lastIndexOf(const QString &s, qsizetype from, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
524 #endif
525 
527  { return lastIndexOf(s, size(), cs); }
529  { return QtPrivate::lastIndexOf(*this, from, s, cs); }
530 
531  [[nodiscard]] inline bool contains(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
532 #if QT_STRINGVIEW_LEVEL < 2
533  [[nodiscard]] inline bool contains(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
534 #endif
535  [[nodiscard]] inline bool contains(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
536  [[nodiscard]] inline bool contains(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
537  [[nodiscard]] qsizetype count(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
538  [[nodiscard]] qsizetype count(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
540 
541 #if QT_CONFIG(regularexpression)
542  [[nodiscard]] qsizetype indexOf(const QRegularExpression &re, qsizetype from = 0,
543  QRegularExpressionMatch *rmatch = nullptr) const;
544 #ifdef Q_QDOC
545  [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const;
546 #else
547  // prevent an ambiguity when called like this: lastIndexOf(re, 0)
548  template <typename T = QRegularExpressionMatch, std::enable_if_t<std::is_same_v<T, QRegularExpressionMatch>, bool> = false>
549  [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, T *rmatch = nullptr) const
550  { return lastIndexOf(re, size(), rmatch); }
551 #endif
552  [[nodiscard]] qsizetype lastIndexOf(const QRegularExpression &re, qsizetype from,
553  QRegularExpressionMatch *rmatch = nullptr) const;
554  [[nodiscard]] bool contains(const QRegularExpression &re, QRegularExpressionMatch *rmatch = nullptr) const;
555  [[nodiscard]] qsizetype count(const QRegularExpression &re) const;
556 #endif
557 
558  enum SectionFlag {
559  SectionDefault = 0x00,
560  SectionSkipEmpty = 0x01,
561  SectionIncludeLeadingSep = 0x02,
562  SectionIncludeTrailingSep = 0x04,
563  SectionCaseInsensitiveSeps = 0x08
564  };
565  Q_DECLARE_FLAGS(SectionFlags, SectionFlag)
566 
567  [[nodiscard]] QString section(QChar sep, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
568  [[nodiscard]] QString section(const QString &in_sep, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
569 #if QT_CONFIG(regularexpression)
570  [[nodiscard]] QString section(const QRegularExpression &re, qsizetype start, qsizetype end = -1, SectionFlags flags = SectionDefault) const;
571 #endif
572  [[nodiscard]] QString left(qsizetype n) const;
573  [[nodiscard]] QString right(qsizetype n) const;
574  [[nodiscard]] QString mid(qsizetype position, qsizetype n = -1) const;
575 
576  [[nodiscard]] QString first(qsizetype n) const
577  { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QString(data(), n); }
578  [[nodiscard]] QString last(qsizetype n) const
579  { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return QString(data() + size() - n, n); }
580  [[nodiscard]] QString sliced(qsizetype pos) const
581  { Q_ASSERT(pos >= 0); Q_ASSERT(pos <= size()); return QString(data() + pos, size() - pos); }
582  [[nodiscard]] QString sliced(qsizetype pos, qsizetype n) const
583  { Q_ASSERT(pos >= 0); Q_ASSERT(n >= 0); Q_ASSERT(size_t(pos) + size_t(n) <= size_t(size())); return QString(data() + pos, n); }
584  [[nodiscard]] QString chopped(qsizetype n) const
585  { Q_ASSERT(n >= 0); Q_ASSERT(n <= size()); return first(size() - n); }
586 
587 
588 #if QT_STRINGVIEW_LEVEL < 2
589  bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
590 #endif
591  [[nodiscard]] bool startsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
592  { return QtPrivate::startsWith(*this, s, cs); }
595 
596 #if QT_STRINGVIEW_LEVEL < 2
597  bool endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
598 #endif
599  [[nodiscard]] bool endsWith(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
600  { return QtPrivate::endsWith(*this, s, cs); }
603 
604  bool isUpper() const;
605  bool isLower() const;
606 
607  [[nodiscard]] QString leftJustified(qsizetype width, QChar fill = QLatin1Char(' '), bool trunc = false) const;
608  [[nodiscard]] QString rightJustified(qsizetype width, QChar fill = QLatin1Char(' '), bool trunc = false) const;
609 
610 #if !defined(Q_CLANG_QDOC)
611  [[nodiscard]] QString toLower() const &
612  { return toLower_helper(*this); }
613  [[nodiscard]] QString toLower() &&
614  { return toLower_helper(*this); }
615  [[nodiscard]] QString toUpper() const &
616  { return toUpper_helper(*this); }
617  [[nodiscard]] QString toUpper() &&
618  { return toUpper_helper(*this); }
619  [[nodiscard]] QString toCaseFolded() const &
620  { return toCaseFolded_helper(*this); }
621  [[nodiscard]] QString toCaseFolded() &&
622  { return toCaseFolded_helper(*this); }
623  [[nodiscard]] QString trimmed() const &
624  { return trimmed_helper(*this); }
625  [[nodiscard]] QString trimmed() &&
626  { return trimmed_helper(*this); }
627  [[nodiscard]] QString simplified() const &
628  { return simplified_helper(*this); }
629  [[nodiscard]] QString simplified() &&
630  { return simplified_helper(*this); }
631 #else
632  [[nodiscard]] QString toLower() const;
633  [[nodiscard]] QString toUpper() const;
634  [[nodiscard]] QString toCaseFolded() const;
635  [[nodiscard]] QString trimmed() const;
636  [[nodiscard]] QString simplified() const;
637 #endif
638  [[nodiscard]] QString toHtmlEscaped() const;
639 
641  QString &insert(qsizetype i, const QChar *uc, qsizetype len);
642 #if QT_STRINGVIEW_LEVEL < 2
643  inline QString &insert(qsizetype i, const QString &s) { return insert(i, s.constData(), s.length()); }
644 #endif
645  inline QString &insert(qsizetype i, QStringView v) { return insert(i, v.data(), v.length()); }
647 
648  QString &append(QChar c);
649  QString &append(const QChar *uc, qsizetype len);
650 #if QT_STRINGVIEW_LEVEL < 2
651  QString &append(const QString &s);
652 #endif
653  inline QString &append(QStringView v) { return append(v.data(), v.length()); }
655 
656  inline QString &prepend(QChar c) { return insert(0, c); }
657  inline QString &prepend(const QChar *uc, qsizetype len) { return insert(0, uc, len); }
658 #if QT_STRINGVIEW_LEVEL < 2
659  inline QString &prepend(const QString &s) { return insert(0, s); }
660 #endif
661  inline QString &prepend(QStringView v) { return prepend(v.data(), v.length()); }
662  inline QString &prepend(QLatin1String s) { return insert(0, s); }
663 
664  inline QString &operator+=(QChar c) { return append(c); }
665 
666 #if QT_STRINGVIEW_LEVEL < 2
667  inline QString &operator+=(const QString &s) { return append(s); }
668 #endif
669  inline QString &operator+=(QStringView v) { return append(v); }
670  inline QString &operator+=(QLatin1String s) { return append(s); }
671 
676  template <typename Predicate>
678  {
679  QtPrivate::sequential_erase_if(*this, pred);
680  return *this;
681  }
682  QString &replace(qsizetype i, qsizetype len, QChar after);
683  QString &replace(qsizetype i, qsizetype len, const QChar *s, qsizetype slen);
684  QString &replace(qsizetype i, qsizetype len, const QString &after);
685  QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
686  QString &replace(const QChar *before, qsizetype blen, const QChar *after, qsizetype alen, Qt::CaseSensitivity cs = Qt::CaseSensitive);
688  QString &replace(QLatin1String before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
689  QString &replace(const QString &before, QLatin1String after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
690  QString &replace(const QString &before, const QString &after,
692  QString &replace(QChar c, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
694 #if QT_CONFIG(regularexpression)
695  QString &replace(const QRegularExpression &re, const QString &after);
696  inline QString &remove(const QRegularExpression &re)
697  { return replace(re, QString()); }
698 #endif
699 
700 public:
701  [[nodiscard]]
702  QStringList split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts,
704  [[nodiscard]]
705  QStringList split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts,
707 #ifndef QT_NO_REGULAREXPRESSION
708  [[nodiscard]]
710  Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const;
711 #endif
712 
713  template <typename Needle, typename...Flags>
714  [[nodiscard]] inline auto tokenize(Needle &&needle, Flags...flags) const &
715  noexcept(noexcept(qTokenize(std::declval<const QString &>(), std::forward<Needle>(needle), flags...)))
716  -> decltype(qTokenize(*this, std::forward<Needle>(needle), flags...))
717  { return qTokenize(qToStringViewIgnoringNull(*this), std::forward<Needle>(needle), flags...); }
718 
719  template <typename Needle, typename...Flags>
720  [[nodiscard]] inline auto tokenize(Needle &&needle, Flags...flags) const &&
721  noexcept(noexcept(qTokenize(std::declval<const QString>(), std::forward<Needle>(needle), flags...)))
722  -> decltype(qTokenize(std::move(*this), std::forward<Needle>(needle), flags...))
723  { return qTokenize(std::move(*this), std::forward<Needle>(needle), flags...); }
724 
725  template <typename Needle, typename...Flags>
726  [[nodiscard]] inline auto tokenize(Needle &&needle, Flags...flags) &&
727  noexcept(noexcept(qTokenize(std::declval<QString>(), std::forward<Needle>(needle), flags...)))
728  -> decltype(qTokenize(std::move(*this), std::forward<Needle>(needle), flags...))
729  { return qTokenize(std::move(*this), std::forward<Needle>(needle), flags...); }
730 
731 
736  NormalizationForm_KC
737  };
738  [[nodiscard]] QString normalized(NormalizationForm mode, QChar::UnicodeVersion version = QChar::Unicode_Unassigned) const;
739 
740  [[nodiscard]] QString repeated(qsizetype times) const;
741 
742  const ushort *utf16() const; // ### Qt 7 char16_t
743 
744 #if !defined(Q_CLANG_QDOC)
745  [[nodiscard]] QByteArray toLatin1() const &
746  { return toLatin1_helper(*this); }
747  [[nodiscard]] QByteArray toLatin1() &&
748  { return toLatin1_helper_inplace(*this); }
749  [[nodiscard]] QByteArray toUtf8() const &
750  { return toUtf8_helper(*this); }
751  [[nodiscard]] QByteArray toUtf8() &&
752  { return toUtf8_helper(*this); }
753  [[nodiscard]] QByteArray toLocal8Bit() const &
754  { return toLocal8Bit_helper(isNull() ? nullptr : constData(), size()); }
755  [[nodiscard]] QByteArray toLocal8Bit() &&
756  { return toLocal8Bit_helper(isNull() ? nullptr : constData(), size()); }
757 #else
758  [[nodiscard]] QByteArray toLatin1() const;
759  [[nodiscard]] QByteArray toUtf8() const;
760  [[nodiscard]] QByteArray toLocal8Bit() const;
761 #endif
762  [[nodiscard]] QList<uint> toUcs4() const; // ### Qt 7 char32_t
763 
764  // note - this are all inline so we can benefit from strlen() compile time optimizations
765  static QString fromLatin1(QByteArrayView ba);
767  static inline QString fromLatin1(const QByteArray &ba) { return fromLatin1(QByteArrayView(ba)); }
768  static inline QString fromLatin1(const char *str, qsizetype size)
769  {
770  return fromLatin1(QByteArrayView(str, !str || size < 0 ? qstrlen(str) : size));
771  }
772  static QString fromUtf8(QByteArrayView utf8);
774  static inline QString fromUtf8(const QByteArray &ba) { return fromUtf8(QByteArrayView(ba)); }
775  static inline QString fromUtf8(const char *utf8, qsizetype size)
776  {
777  return fromUtf8(QByteArrayView(utf8, !utf8 || size < 0 ? qstrlen(utf8) : size));
778  }
779 #if defined(__cpp_char8_t) || defined(Q_CLANG_QDOC)
781  static inline QString fromUtf8(const char8_t *str)
782  { return fromUtf8(reinterpret_cast<const char *>(str)); }
784  static inline QString fromUtf8(const char8_t *str, qsizetype size)
785  { return fromUtf8(reinterpret_cast<const char *>(str), size); }
786 #endif
787  static QString fromLocal8Bit(QByteArrayView ba);
789  static inline QString fromLocal8Bit(const QByteArray &ba) { return fromLocal8Bit(QByteArrayView(ba)); }
790  static inline QString fromLocal8Bit(const char *str, qsizetype size)
791  {
792  return fromLocal8Bit(QByteArrayView(str, !str || size < 0 ? qstrlen(str) : size));
793  }
794  static QString fromUtf16(const char16_t *, qsizetype size = -1);
795  static QString fromUcs4(const char32_t *, qsizetype size = -1);
796  static QString fromRawData(const QChar *, qsizetype size);
797 
798 #if QT_DEPRECATED_SINCE(6, 0)
799  QT_DEPRECATED_VERSION_X_6_0("Use char16_t* overload.")
801  { return fromUtf16(reinterpret_cast<const char16_t *>(str), size); }
802  QT_DEPRECATED_VERSION_X_6_0("Use char32_t* overload.")
803  static QString fromUcs4(const uint *str, qsizetype size = -1)
804  { return fromUcs4(reinterpret_cast<const char32_t *>(str), size); }
805 #endif
806 
807  inline qsizetype toWCharArray(wchar_t *array) const;
808  [[nodiscard]] static inline QString fromWCharArray(const wchar_t *string, qsizetype size = -1);
809 
810  QString &setRawData(const QChar *unicode, qsizetype size);
811  QString &setUnicode(const QChar *unicode, qsizetype size);
812  inline QString &setUtf16(const ushort *utf16, qsizetype size); // ### Qt 7 char16_t
813 
814 #if QT_STRINGVIEW_LEVEL < 2
815  int compare(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
816 #endif
818  inline int compare(QStringView s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept;
820  { return compare(QStringView{&ch, 1}, cs); }
821 
822  static inline int compare(const QString &s1, const QString &s2,
824  { return s1.compare(s2, cs); }
825 
826  static inline int compare(const QString &s1, QLatin1String s2,
828  { return s1.compare(s2, cs); }
829  static inline int compare(QLatin1String s1, const QString &s2,
831  { return -s2.compare(s1, cs); }
833  { return s1.compare(s2, cs); }
835  { return -s2.compare(s1, cs); }
836 
837  int localeAwareCompare(const QString& s) const;
838  int localeAwareCompare(QStringView s) const;
839  static int localeAwareCompare(const QString& s1, const QString& s2)
840  { return s1.localeAwareCompare(s2); }
841 
842  static int localeAwareCompare(QStringView s1, QStringView s2);
843 
844  short toShort(bool *ok=nullptr, int base=10) const
845  { return toIntegral_helper<short>(*this, ok, base); }
846  ushort toUShort(bool *ok=nullptr, int base=10) const
847  { return toIntegral_helper<ushort>(*this, ok, base); }
848  int toInt(bool *ok=nullptr, int base=10) const
849  { return toIntegral_helper<int>(*this, ok, base); }
850  uint toUInt(bool *ok=nullptr, int base=10) const
851  { return toIntegral_helper<uint>(*this, ok, base); }
852  long toLong(bool *ok=nullptr, int base=10) const
853  { return toIntegral_helper<long>(*this, ok, base); }
854  ulong toULong(bool *ok=nullptr, int base=10) const
855  { return toIntegral_helper<ulong>(*this, ok, base); }
856  qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
857  qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
858  float toFloat(bool *ok=nullptr) const;
859  double toDouble(bool *ok=nullptr) const;
860 
861  QString &setNum(short, int base=10);
862  QString &setNum(ushort, int base=10);
863  QString &setNum(int, int base=10);
864  QString &setNum(uint, int base=10);
865  QString &setNum(long, int base=10);
866  QString &setNum(ulong, int base=10);
867  QString &setNum(qlonglong, int base=10);
868  QString &setNum(qulonglong, int base=10);
869  QString &setNum(float, char format='g', int precision=6);
870  QString &setNum(double, char format='g', int precision=6);
871 
872  static QString number(int, int base=10);
873  static QString number(uint, int base=10);
874  static QString number(long, int base=10);
875  static QString number(ulong, int base=10);
876  static QString number(qlonglong, int base=10);
877  static QString number(qulonglong, int base=10);
878  static QString number(double, char format='g', int precision=6);
879 
880  friend bool operator==(const QString &s1, const QString &s2) noexcept
881  { return (s1.size() == s2.size()) && QtPrivate::compareStrings(s1, s2, Qt::CaseSensitive) == 0; }
882  friend bool operator< (const QString &s1, const QString &s2) noexcept
884  friend bool operator> (const QString &s1, const QString &s2) noexcept { return s2 < s1; }
885  friend bool operator!=(const QString &s1, const QString &s2) noexcept { return !(s1 == s2); }
886  friend bool operator<=(const QString &s1, const QString &s2) noexcept { return !(s1 > s2); }
887  friend bool operator>=(const QString &s1, const QString &s2) noexcept { return !(s1 < s2); }
888 
889  friend bool operator==(const QString &s1, QLatin1String s2) noexcept
890  { return (s1.size() == s2.size()) && QtPrivate::compareStrings(s1, s2, Qt::CaseSensitive) == 0; }
891  friend bool operator< (const QString &s1, QLatin1String s2) noexcept
893  friend bool operator> (const QString &s1, QLatin1String s2) noexcept
895  friend bool operator!=(const QString &s1, QLatin1String s2) noexcept { return !(s1 == s2); }
896  friend bool operator<=(const QString &s1, QLatin1String s2) noexcept { return !(s1 > s2); }
897  friend bool operator>=(const QString &s1, QLatin1String s2) noexcept { return !(s1 < s2); }
898 
899  friend bool operator==(QLatin1String s1, const QString &s2) noexcept { return s2 == s1; }
900  friend bool operator< (QLatin1String s1, const QString &s2) noexcept { return s2 > s1; }
901  friend bool operator> (QLatin1String s1, const QString &s2) noexcept { return s2 < s1; }
902  friend bool operator!=(QLatin1String s1, const QString &s2) noexcept { return s2 != s1; }
903  friend bool operator<=(QLatin1String s1, const QString &s2) noexcept { return s2 >= s1; }
904  friend bool operator>=(QLatin1String s1, const QString &s2) noexcept { return s2 <= s1; }
905 
906  // Check isEmpty() instead of isNull() for backwards compatibility.
907  friend bool operator==(const QString &s1, std::nullptr_t) noexcept { return s1.isEmpty(); }
908  friend bool operator!=(const QString &s1, std::nullptr_t) noexcept { return !s1.isEmpty(); }
909  friend bool operator< (const QString & , std::nullptr_t) noexcept { return false; }
910  friend bool operator> (const QString &s1, std::nullptr_t) noexcept { return !s1.isEmpty(); }
911  friend bool operator<=(const QString &s1, std::nullptr_t) noexcept { return s1.isEmpty(); }
912  friend bool operator>=(const QString & , std::nullptr_t) noexcept { return true; }
913  friend bool operator==(std::nullptr_t, const QString &s2) noexcept { return s2 == nullptr; }
914  friend bool operator!=(std::nullptr_t, const QString &s2) noexcept { return s2 != nullptr; }
915  friend bool operator< (std::nullptr_t, const QString &s2) noexcept { return s2 > nullptr; }
916  friend bool operator> (std::nullptr_t, const QString &s2) noexcept { return s2 < nullptr; }
917  friend bool operator<=(std::nullptr_t, const QString &s2) noexcept { return s2 >= nullptr; }
918  friend bool operator>=(std::nullptr_t, const QString &s2) noexcept { return s2 <= nullptr; }
919 
920  friend bool operator==(const QString &s1, const char16_t *s2) noexcept { return s1 == QStringView(s2); }
921  friend bool operator!=(const QString &s1, const char16_t *s2) noexcept { return s1 != QStringView(s2); }
922  friend bool operator< (const QString &s1, const char16_t *s2) noexcept { return s1 < QStringView(s2); }
923  friend bool operator> (const QString &s1, const char16_t *s2) noexcept { return s1 > QStringView(s2); }
924  friend bool operator<=(const QString &s1, const char16_t *s2) noexcept { return s1 <= QStringView(s2); }
925  friend bool operator>=(const QString &s1, const char16_t *s2) noexcept { return s1 >= QStringView(s2); }
926 
927  friend bool operator==(const char16_t *s1, const QString &s2) noexcept { return s2 == s1; }
928  friend bool operator!=(const char16_t *s1, const QString &s2) noexcept { return s2 != s1; }
929  friend bool operator< (const char16_t *s1, const QString &s2) noexcept { return s2 > s1; }
930  friend bool operator> (const char16_t *s1, const QString &s2) noexcept { return s2 < s1; }
931  friend bool operator<=(const char16_t *s1, const QString &s2) noexcept { return s2 >= s1; }
932  friend bool operator>=(const char16_t *s1, const QString &s2) noexcept { return s2 <= s1; }
933 
934  // QChar <> QString
935  friend inline bool operator==(QChar lhs, const QString &rhs) noexcept
936  { return rhs.size() == 1 && lhs == rhs.front(); }
937  friend inline bool operator< (QChar lhs, const QString &rhs) noexcept
938  { return compare_helper(&lhs, 1, rhs.data(), rhs.size()) < 0; }
939  friend inline bool operator> (QChar lhs, const QString &rhs) noexcept
940  { return compare_helper(&lhs, 1, rhs.data(), rhs.size()) > 0; }
941 
942  friend inline bool operator!=(QChar lhs, const QString &rhs) noexcept { return !(lhs == rhs); }
943  friend inline bool operator<=(QChar lhs, const QString &rhs) noexcept { return !(lhs > rhs); }
944  friend inline bool operator>=(QChar lhs, const QString &rhs) noexcept { return !(lhs < rhs); }
945 
946  friend inline bool operator==(const QString &lhs, QChar rhs) noexcept { return rhs == lhs; }
947  friend inline bool operator!=(const QString &lhs, QChar rhs) noexcept { return !(rhs == lhs); }
948  friend inline bool operator< (const QString &lhs, QChar rhs) noexcept { return rhs > lhs; }
949  friend inline bool operator> (const QString &lhs, QChar rhs) noexcept { return rhs < lhs; }
950  friend inline bool operator<=(const QString &lhs, QChar rhs) noexcept { return !(rhs < lhs); }
951  friend inline bool operator>=(const QString &lhs, QChar rhs) noexcept { return !(rhs > lhs); }
952 
953  // ASCII compatibility
954 #if defined(QT_RESTRICTED_CAST_FROM_ASCII)
955  template <qsizetype N>
956  inline QString(const char (&ch)[N])
957  : QString(fromUtf8(ch))
958  {}
959  template <qsizetype N>
960  QString(char (&)[N]) = delete;
961  template <qsizetype N>
962  inline QString &operator=(const char (&ch)[N])
963  { return (*this = fromUtf8(ch, N - 1)); }
964  template <qsizetype N>
965  QString &operator=(char (&)[N]) = delete;
966 #endif
967 #if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
968  QT_ASCII_CAST_WARN inline QString(const char *ch)
969  : QString(fromUtf8(ch))
970  {}
971  QT_ASCII_CAST_WARN inline QString(const QByteArray &a)
972  : QString(fromUtf8(a))
973  {}
974  QT_ASCII_CAST_WARN inline QString &operator=(const char *ch)
975  { return (*this = fromUtf8(ch)); }
976  QT_ASCII_CAST_WARN inline QString &operator=(const QByteArray &a)
977  { return (*this = fromUtf8(a)); }
978 
979  // these are needed, so it compiles with STL support enabled
980  QT_ASCII_CAST_WARN inline QString &prepend(const char *s)
981  { return prepend(QString::fromUtf8(s)); }
982  QT_ASCII_CAST_WARN inline QString &prepend(const QByteArray &s)
983  { return prepend(QString::fromUtf8(s)); }
984  QT_ASCII_CAST_WARN inline QString &append(const char *s)
985  { return append(QString::fromUtf8(s)); }
986  QT_ASCII_CAST_WARN inline QString &append(const QByteArray &s)
987  { return append(QString::fromUtf8(s)); }
988  QT_ASCII_CAST_WARN inline QString &insert(qsizetype i, const char *s)
989  { return insert(i, QString::fromUtf8(s)); }
990  QT_ASCII_CAST_WARN inline QString &insert(qsizetype i, const QByteArray &s)
991  { return insert(i, QString::fromUtf8(s)); }
992  QT_ASCII_CAST_WARN inline QString &operator+=(const char *s)
993  { return append(QString::fromUtf8(s)); }
994  QT_ASCII_CAST_WARN inline QString &operator+=(const QByteArray &s)
995  { return append(QString::fromUtf8(s)); }
996 
997  QT_ASCII_CAST_WARN inline bool operator==(const char *s) const;
998  QT_ASCII_CAST_WARN inline bool operator!=(const char *s) const;
999  QT_ASCII_CAST_WARN inline bool operator<(const char *s) const;
1000  QT_ASCII_CAST_WARN inline bool operator<=(const char *s) const;
1001  QT_ASCII_CAST_WARN inline bool operator>(const char *s) const;
1002  QT_ASCII_CAST_WARN inline bool operator>=(const char *s) const;
1003 
1004  QT_ASCII_CAST_WARN inline bool operator==(const QByteArray &s) const;
1005  QT_ASCII_CAST_WARN inline bool operator!=(const QByteArray &s) const;
1006  QT_ASCII_CAST_WARN inline bool operator<(const QByteArray &s) const;
1007  QT_ASCII_CAST_WARN inline bool operator>(const QByteArray &s) const;
1008  QT_ASCII_CAST_WARN inline bool operator<=(const QByteArray &s) const;
1009  QT_ASCII_CAST_WARN inline bool operator>=(const QByteArray &s) const;
1010 
1011  QT_ASCII_CAST_WARN friend bool operator==(const char *s1, const QString &s2)
1012  { return QString::compare_helper(s2.constData(), s2.size(), s1, -1) == 0; }
1013  QT_ASCII_CAST_WARN friend bool operator!=(const char *s1, const QString &s2)
1014  { return QString::compare_helper(s2.constData(), s2.size(), s1, -1) != 0; }
1015  QT_ASCII_CAST_WARN friend bool operator< (const char *s1, const QString &s2)
1016  { return QString::compare_helper(s2.constData(), s2.size(), s1, -1) > 0; }
1017  QT_ASCII_CAST_WARN friend bool operator> (const char *s1, const QString &s2)
1018  { return QString::compare_helper(s2.constData(), s2.size(), s1, -1) < 0; }
1019  QT_ASCII_CAST_WARN friend bool operator<=(const char *s1, const QString &s2)
1020  { return QString::compare_helper(s2.constData(), s2.size(), s1, -1) >= 0; }
1021  QT_ASCII_CAST_WARN friend bool operator>=(const char *s1, const QString &s2)
1022  { return QString::compare_helper(s2.constData(), s2.size(), s1, -1) <= 0; }
1023 #endif
1024 
1025  typedef QChar *iterator;
1026  typedef const QChar *const_iterator;
1029  typedef std::reverse_iterator<iterator> reverse_iterator;
1030  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
1031  inline iterator begin();
1032  inline const_iterator begin() const;
1033  inline const_iterator cbegin() const;
1034  inline const_iterator constBegin() const;
1035  inline iterator end();
1036  inline const_iterator end() const;
1037  inline const_iterator cend() const;
1038  inline const_iterator constEnd() const;
1045 
1046  // STL compatibility
1049  typedef const QChar & const_reference;
1050  typedef QChar & reference;
1051  typedef QChar *pointer;
1052  typedef const QChar *const_pointer;
1054  inline void push_back(QChar c) { append(c); }
1055  inline void push_back(const QString &s) { append(s); }
1056  inline void push_front(QChar c) { prepend(c); }
1057  inline void push_front(const QString &s) { prepend(s); }
1058  void shrink_to_fit() { squeeze(); }
1060 
1061  static inline QString fromStdString(const std::string &s);
1062  inline std::string toStdString() const;
1063  static inline QString fromStdWString(const std::wstring &s);
1064  inline std::wstring toStdWString() const;
1065 
1066  static inline QString fromStdU16String(const std::u16string &s);
1067  inline std::u16string toStdU16String() const;
1068  static inline QString fromStdU32String(const std::u32string &s);
1069  inline std::u32string toStdU32String() const;
1070 
1071 #if defined(Q_OS_DARWIN) || defined(Q_QDOC)
1072  static QString fromCFString(CFStringRef string);
1073  CFStringRef toCFString() const Q_DECL_CF_RETURNS_RETAINED;
1074  static QString fromNSString(const NSString *string);
1075  NSString *toNSString() const Q_DECL_NS_RETURNS_AUTORELEASED;
1076 #endif
1077 
1078  inline bool isNull() const { return d->isNull(); }
1079 
1080 
1081  bool isSimpleText() const;
1082  bool isRightToLeft() const;
1083  [[nodiscard]] bool isValidUtf16() const noexcept
1084  { return QStringView(*this).isValidUtf16(); }
1085 
1087  explicit QString(DataPointer &&dd) : d(std::move(dd)) {}
1088 
1089 private:
1090 #if defined(QT_NO_CAST_FROM_ASCII)
1091  QString &operator+=(const char *s);
1092  QString &operator+=(const QByteArray &s);
1093  QString(const char *ch);
1094  QString(const QByteArray &a);
1095  QString &operator=(const char *ch);
1096  QString &operator=(const QByteArray &a);
1097 #endif
1098 
1099  DataPointer d;
1100  static const char16_t _empty;
1101 
1102  void reallocData(qsizetype alloc, QArrayData::AllocationOption option);
1103  void reallocGrowData(qsizetype n);
1104  static int compare_helper(const QChar *data1, qsizetype length1,
1105  const QChar *data2, qsizetype length2,
1106  Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
1107  static int compare_helper(const QChar *data1, qsizetype length1,
1108  const char *data2, qsizetype length2,
1109  Qt::CaseSensitivity cs = Qt::CaseSensitive) noexcept;
1110  static int localeAwareCompare_helper(const QChar *data1, qsizetype length1,
1111  const QChar *data2, qsizetype length2);
1112  static QString toLower_helper(const QString &str);
1113  static QString toLower_helper(QString &str);
1114  static QString toUpper_helper(const QString &str);
1115  static QString toUpper_helper(QString &str);
1116  static QString toCaseFolded_helper(const QString &str);
1117  static QString toCaseFolded_helper(QString &str);
1118  static QString trimmed_helper(const QString &str);
1119  static QString trimmed_helper(QString &str);
1120  static QString simplified_helper(const QString &str);
1121  static QString simplified_helper(QString &str);
1122  static QByteArray toLatin1_helper(const QString &);
1123  static QByteArray toLatin1_helper_inplace(QString &);
1124  static QByteArray toUtf8_helper(const QString &);
1125  static QByteArray toLocal8Bit_helper(const QChar *data, qsizetype size);
1126  static qsizetype toUcs4_helper(const ushort *uc, qsizetype length, uint *out); // ### Qt 7 char16_t
1127  static qlonglong toIntegral_helper(QStringView string, bool *ok, int base);
1128  static qulonglong toIntegral_helper(QStringView string, bool *ok, uint base);
1129  void replace_helper(size_t *indices, qsizetype nIndices, qsizetype blen, const QChar *after, qsizetype alen);
1130  friend class QStringView;
1131  friend class QByteArray;
1132  friend struct QAbstractConcatenable;
1133 
1134  template <typename T> static
1135  T toIntegral_helper(QStringView string, bool *ok, int base)
1136  {
1138  using Int32 = typename std::conditional<std::is_unsigned<T>::value, uint, int>::type;
1139 
1140  // we select the right overload by casting base to int or uint
1141  Int64 val = toIntegral_helper(string, ok, Int32(base));
1142  if (T(val) != val) {
1143  if (ok)
1144  *ok = false;
1145  val = 0;
1146  }
1147  return T(val);
1148  }
1149 
1150 public:
1151  inline DataPointer &data_ptr() { return d; }
1152  inline const DataPointer &data_ptr() const { return d; }
1153 };
1154 
1155 //
1156 // QLatin1String inline members that require QString:
1157 //
1158 
1159 QString QLatin1String::toString() const { return *this; }
1160 
1161 //
1162 // QStringView inline members that require QString:
1163 //
1164 
1166 { return Q_ASSERT(size() == length()), QString(data(), length()); }
1167 
1169 { return QString::toIntegral_helper<qint64>(*this, ok, base); }
1171 { return QString::toIntegral_helper<quint64>(*this, ok, base); }
1172 long QStringView::toLong(bool *ok, int base) const
1173 { return QString::toIntegral_helper<long>(*this, ok, base); }
1175 { return QString::toIntegral_helper<ulong>(*this, ok, base); }
1176 int QStringView::toInt(bool *ok, int base) const
1177 { return QString::toIntegral_helper<int>(*this, ok, base); }
1178 uint QStringView::toUInt(bool *ok, int base) const
1179 { return QString::toIntegral_helper<uint>(*this, ok, base); }
1180 short QStringView::toShort(bool *ok, int base) const
1181 { return QString::toIntegral_helper<short>(*this, ok, base); }
1183 { return QString::toIntegral_helper<ushort>(*this, ok, base); }
1184 
1185 //
1186 // QUtf8StringView inline members that require QString:
1187 //
1188 
1189 template <bool UseChar8T>
1191 {
1192  return QString::fromUtf8(data(), size());
1193 }
1194 
1195 //
1196 // QAnyStringView inline members that require QString:
1197 //
1198 
1200  : QAnyStringView{str.isNull() ? nullptr : str.data(), str.size()} {}
1202  : QAnyStringView{str.isNull() ? nullptr : str.data(), str.size()} {}
1203 
1205 { return QtPrivate::convertToQString(*this); }
1206 
1207 //
1208 // QString inline members
1209 //
1211 { *this = QString::fromLatin1(latin1.data(), latin1.size()); }
1212 inline const QChar QString::at(qsizetype i) const
1213 { Q_ASSERT(size_t(i) < size_t(size())); return QChar(d.data()[i]); }
1215 { Q_ASSERT(size_t(i) < size_t(size())); return QChar(d.data()[i]); }
1216 inline bool QString::isEmpty() const
1217 { return d.size == 0; }
1218 inline const QChar *QString::unicode() const
1219 { return data(); }
1220 inline const QChar *QString::data() const
1221 {
1222 #if QT5_NULL_STRINGS == 1
1223  return reinterpret_cast<const QChar *>(d.data() ? d.data() : &_empty);
1224 #else
1225  return reinterpret_cast<const QChar *>(d.data());
1226 #endif
1227 }
1229 {
1230  detach();
1231  Q_ASSERT(d.data());
1232  return reinterpret_cast<QChar *>(d.data());
1233 }
1234 inline const QChar *QString::constData() const
1235 { return data(); }
1236 inline void QString::detach()
1237 { if (d->needsDetach()) reallocData(d.size, QArrayData::KeepSize); }
1238 inline bool QString::isDetached() const
1239 { return !d->isShared(); }
1240 inline void QString::clear()
1241 { if (!isNull()) *this = QString(); }
1242 inline QString::QString(const QString &other) noexcept : d(other.d)
1243 { }
1244 inline qsizetype QString::capacity() const { return qsizetype(d->constAllocatedCapacity()); }
1245 inline QString &QString::setNum(short n, int base)
1246 { return setNum(qlonglong(n), base); }
1248 { return setNum(qulonglong(n), base); }
1249 inline QString &QString::setNum(int n, int base)
1250 { return setNum(qlonglong(n), base); }
1252 { return setNum(qulonglong(n), base); }
1253 inline QString &QString::setNum(long n, int base)
1254 { return setNum(qlonglong(n), base); }
1256 { return setNum(qulonglong(n), base); }
1257 inline QString &QString::setNum(float n, char f, int prec)
1258 { return setNum(double(n),f,prec); }
1259 inline QString QString::arg(int a, int fieldWidth, int base, QChar fillChar) const
1260 { return arg(qlonglong(a), fieldWidth, base, fillChar); }
1261 inline QString QString::arg(uint a, int fieldWidth, int base, QChar fillChar) const
1262 { return arg(qulonglong(a), fieldWidth, base, fillChar); }
1263 inline QString QString::arg(long a, int fieldWidth, int base, QChar fillChar) const
1264 { return arg(qlonglong(a), fieldWidth, base, fillChar); }
1265 inline QString QString::arg(ulong a, int fieldWidth, int base, QChar fillChar) const
1266 { return arg(qulonglong(a), fieldWidth, base, fillChar); }
1267 inline QString QString::arg(short a, int fieldWidth, int base, QChar fillChar) const
1268 { return arg(qlonglong(a), fieldWidth, base, fillChar); }
1269 inline QString QString::arg(ushort a, int fieldWidth, int base, QChar fillChar) const
1270 { return arg(qulonglong(a), fieldWidth, base, fillChar); }
1271 
1272 inline QString QString::section(QChar asep, qsizetype astart, qsizetype aend, SectionFlags aflags) const
1273 { return section(QString(asep), astart, aend, aflags); }
1274 
1276 QT_WARNING_DISABLE_MSVC(4127) // "conditional expression is constant"
1277 QT_WARNING_DISABLE_INTEL(111) // "statement is unreachable"
1278 
1279 inline qsizetype QString::toWCharArray(wchar_t *array) const
1280 {
1282 }
1283 
1285 {
1286  if (sizeof(wchar_t) == sizeof(QChar)) {
1287  if (auto src = data())
1288  memcpy(array, src, sizeof(QChar) * size());
1289  return size();
1290  } else {
1291  return QString::toUcs4_helper(reinterpret_cast<const ushort *>(data()), size(),
1292  reinterpret_cast<uint *>(array));
1293  }
1294 }
1295 
1297 
1298 inline QString QString::fromWCharArray(const wchar_t *string, qsizetype size)
1299 {
1300  return sizeof(wchar_t) == sizeof(QChar) ? fromUtf16(reinterpret_cast<const char16_t *>(string), size)
1301  : fromUcs4(reinterpret_cast<const char32_t *>(string), size);
1302 }
1303 
1304 inline constexpr QString::QString() noexcept {}
1306 
1307 inline void QString::reserve(qsizetype asize)
1308 {
1309  if (d->needsDetach() || asize >= capacity() - d.freeSpaceAtBegin())
1310  reallocData(qMax(asize, size()), QArrayData::KeepSize);
1311  if (d->constAllocatedCapacity())
1312  d->setFlag(Data::CapacityReserved);
1313 }
1314 
1315 inline void QString::squeeze()
1316 {
1317  if (!d.isMutable())
1318  return;
1319  if (d->needsDetach() || size() < capacity())
1320  reallocData(d.size, QArrayData::KeepSize);
1321  if (d->constAllocatedCapacity())
1322  d->clearFlag(Data::CapacityReserved);
1323 }
1324 
1325 inline QString &QString::setUtf16(const ushort *autf16, qsizetype asize)
1326 { return setUnicode(reinterpret_cast<const QChar *>(autf16), asize); }
1328 { Q_ASSERT(i >= 0 && i < size()); return data()[i]; }
1329 inline QChar &QString::front() { return operator[](0); }
1330 inline QChar &QString::back() { return operator[](size() - 1); }
1332 { detach(); return reinterpret_cast<QChar*>(d.data()); }
1334 { return reinterpret_cast<const QChar*>(d.data()); }
1336 { return reinterpret_cast<const QChar*>(d.data()); }
1338 { return reinterpret_cast<const QChar*>(d.data()); }
1340 { detach(); return reinterpret_cast<QChar*>(d.data() + d.size); }
1342 { return reinterpret_cast<const QChar*>(d.data() + d.size); }
1344 { return reinterpret_cast<const QChar*>(d.data() + d.size); }
1346 { return reinterpret_cast<const QChar*>(d.data() + d.size); }
1347 #if QT_STRINGVIEW_LEVEL < 2
1348 inline bool QString::contains(const QString &s, Qt::CaseSensitivity cs) const
1349 { return indexOf(s, 0, cs) != -1; }
1350 #endif
1352 { return indexOf(s, 0, cs) != -1; }
1354 { return indexOf(c, 0, cs) != -1; }
1355 inline bool QString::contains(QStringView s, Qt::CaseSensitivity cs) const noexcept
1356 { return indexOf(s, 0, cs) != -1; }
1357 
1358 #if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
1359 inline bool QString::operator==(const char *s) const
1360 { return QString::compare_helper(constData(), size(), s, -1) == 0; }
1361 inline bool QString::operator!=(const char *s) const
1362 { return QString::compare_helper(constData(), size(), s, -1) != 0; }
1363 inline bool QString::operator<(const char *s) const
1364 { return QString::compare_helper(constData(), size(), s, -1) < 0; }
1365 inline bool QString::operator>(const char *s) const
1366 { return QString::compare_helper(constData(), size(), s, -1) > 0; }
1367 inline bool QString::operator<=(const char *s) const
1368 { return QString::compare_helper(constData(), size(), s, -1) <= 0; }
1369 inline bool QString::operator>=(const char *s) const
1370 { return QString::compare_helper(constData(), size(), s, -1) >= 0; }
1371 
1372 QT_ASCII_CAST_WARN inline bool QLatin1String::operator==(const char *s) const
1373 { return QString::fromUtf8(s) == *this; }
1374 QT_ASCII_CAST_WARN inline bool QLatin1String::operator!=(const char *s) const
1375 { return QString::fromUtf8(s) != *this; }
1376 QT_ASCII_CAST_WARN inline bool QLatin1String::operator<(const char *s) const
1377 { return QString::fromUtf8(s) > *this; }
1378 QT_ASCII_CAST_WARN inline bool QLatin1String::operator>(const char *s) const
1379 { return QString::fromUtf8(s) < *this; }
1380 QT_ASCII_CAST_WARN inline bool QLatin1String::operator<=(const char *s) const
1381 { return QString::fromUtf8(s) >= *this; }
1382 QT_ASCII_CAST_WARN inline bool QLatin1String::operator>=(const char *s) const
1383 { return QString::fromUtf8(s) <= *this; }
1384 
1385 QT_ASCII_CAST_WARN inline bool QLatin1String::operator==(const QByteArray &s) const
1386 { return QString::fromUtf8(s) == *this; }
1387 QT_ASCII_CAST_WARN inline bool QLatin1String::operator!=(const QByteArray &s) const
1388 { return QString::fromUtf8(s) != *this; }
1389 QT_ASCII_CAST_WARN inline bool QLatin1String::operator<(const QByteArray &s) const
1390 { return QString::fromUtf8(s) > *this; }
1391 QT_ASCII_CAST_WARN inline bool QLatin1String::operator>(const QByteArray &s) const
1392 { return QString::fromUtf8(s) < *this; }
1393 QT_ASCII_CAST_WARN inline bool QLatin1String::operator<=(const QByteArray &s) const
1394 { return QString::fromUtf8(s) >= *this; }
1395 QT_ASCII_CAST_WARN inline bool QLatin1String::operator>=(const QByteArray &s) const
1396 { return QString::fromUtf8(s) <= *this; }
1397 
1398 inline int QLatin1String::compare_helper(const QLatin1String &s1, const char *s2)
1399 {
1401 }
1402 
1403 QT_ASCII_CAST_WARN inline bool QString::operator==(const QByteArray &s) const
1404 { return QString::compare_helper(constData(), size(), s.constData(), s.size()) == 0; }
1405 QT_ASCII_CAST_WARN inline bool QString::operator!=(const QByteArray &s) const
1406 { return QString::compare_helper(constData(), size(), s.constData(), s.size()) != 0; }
1407 QT_ASCII_CAST_WARN inline bool QString::operator<(const QByteArray &s) const
1408 { return QString::compare_helper(constData(), size(), s.constData(), s.size()) < 0; }
1409 QT_ASCII_CAST_WARN inline bool QString::operator>(const QByteArray &s) const
1410 { return QString::compare_helper(constData(), size(), s.constData(), s.size()) > 0; }
1411 QT_ASCII_CAST_WARN inline bool QString::operator<=(const QByteArray &s) const
1412 { return QString::compare_helper(constData(), size(), s.constData(), s.size()) <= 0; }
1413 QT_ASCII_CAST_WARN inline bool QString::operator>=(const QByteArray &s) const
1414 { return QString::compare_helper(constData(), size(), s.constData(), s.size()) >= 0; }
1415 
1416 inline bool QByteArray::operator==(const QString &s) const
1417 { return QString::compare_helper(s.constData(), s.size(), constData(), size()) == 0; }
1418 inline bool QByteArray::operator!=(const QString &s) const
1419 { return QString::compare_helper(s.constData(), s.size(), constData(), size()) != 0; }
1420 inline bool QByteArray::operator<(const QString &s) const
1421 { return QString::compare_helper(s.constData(), s.size(), constData(), size()) > 0; }
1422 inline bool QByteArray::operator>(const QString &s) const
1423 { return QString::compare_helper(s.constData(), s.size(), constData(), size()) < 0; }
1424 inline bool QByteArray::operator<=(const QString &s) const
1425 { return QString::compare_helper(s.constData(), s.size(), constData(), size()) >= 0; }
1426 inline bool QByteArray::operator>=(const QString &s) const
1427 { return QString::compare_helper(s.constData(), s.size(), constData(), size()) <= 0; }
1428 #endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
1429 
1430 #if !defined(QT_USE_FAST_OPERATOR_PLUS) && !defined(QT_USE_QSTRINGBUILDER)
1431 inline const QString operator+(const QString &s1, const QString &s2)
1432 { QString t(s1); t += s2; return t; }
1433 inline const QString operator+(const QString &s1, QChar s2)
1434 { QString t(s1); t += s2; return t; }
1435 inline const QString operator+(QChar s1, const QString &s2)
1436 { QString t(s1); t += s2; return t; }
1437 # if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
1438 QT_ASCII_CAST_WARN inline const QString operator+(const QString &s1, const char *s2)
1439 { QString t(s1); t += QString::fromUtf8(s2); return t; }
1440 QT_ASCII_CAST_WARN inline const QString operator+(const char *s1, const QString &s2)
1441 { QString t = QString::fromUtf8(s1); t += s2; return t; }
1442 QT_ASCII_CAST_WARN inline const QString operator+(const QByteArray &ba, const QString &s)
1443 { QString t = QString::fromUtf8(ba); t += s; return t; }
1444 QT_ASCII_CAST_WARN inline const QString operator+(const QString &s, const QByteArray &ba)
1445 { QString t(s); t += QString::fromUtf8(ba); return t; }
1446 # endif // QT_NO_CAST_FROM_ASCII
1447 #endif // QT_USE_QSTRINGBUILDER
1448 
1450 { return toUtf8().toStdString(); }
1451 
1453 { return fromUtf8(s.data(), qsizetype(s.size())); }
1454 
1455 inline std::wstring QString::toStdWString() const
1456 {
1457  std::wstring str;
1458  str.resize(length());
1459  str.resize(toWCharArray(str.data()));
1460  return str;
1461 }
1462 
1463 inline QString QString::fromStdWString(const std::wstring &s)
1464 { return fromWCharArray(s.data(), qsizetype(s.size())); }
1465 
1466 inline QString QString::fromStdU16String(const std::u16string &s)
1467 { return fromUtf16(s.data(), qsizetype(s.size())); }
1468 
1469 inline std::u16string QString::toStdU16String() const
1470 { return std::u16string(reinterpret_cast<const char16_t*>(data()), length()); }
1471 
1472 inline QString QString::fromStdU32String(const std::u32string &s)
1473 { return fromUcs4(s.data(), qsizetype(s.size())); }
1474 
1475 inline std::u32string QString::toStdU32String() const
1476 {
1477  std::u32string u32str(length(), char32_t(0));
1478  qsizetype len = toUcs4_helper(reinterpret_cast<const ushort *>(constData()),
1479  length(), reinterpret_cast<uint*>(&u32str[0]));
1480  u32str.resize(len);
1481  return u32str;
1482 }
1483 
1484 #if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
1485 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QString &);
1486 Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QString &);
1487 #endif
1488 
1490 Q_DECLARE_OPERATORS_FOR_FLAGS(QString::SectionFlags)
1491 
1493 { return -s.compare(*this, cs); }
1494 
1496 { return localeAwareCompare_helper(constData(), length(), s.constData(), s.length()); }
1498 { return localeAwareCompare_helper(s1.constData(), s1.length(), s2.constData(), s2.length()); }
1499 
1500 namespace QtPrivate {
1501 // used by qPrintable() and qUtf8Printable() macros
1502 inline const QString &asString(const QString &s) { return s; }
1503 inline QString &&asString(QString &&s) { return std::move(s); }
1504 }
1505 
1506 //
1507 // QStringView::arg() implementation
1508 //
1509 
1510 namespace QtPrivate {
1511 
1512 struct ArgBase {
1513  enum Tag : uchar { L1, U8, U16 } tag;
1514 };
1515 
1518  QStringViewArg() = default;
1519  constexpr explicit QStringViewArg(QStringView v) noexcept : ArgBase{U16}, string{v} {}
1520 };
1521 
1524  QLatin1StringArg() = default;
1525  constexpr explicit QLatin1StringArg(QLatin1String v) noexcept : ArgBase{L1}, string{v} {}
1526 };
1527 
1528 [[nodiscard]] Q_CORE_EXPORT QString argToQString(QStringView pattern, size_t n, const ArgBase **args);
1529 [[nodiscard]] Q_CORE_EXPORT QString argToQString(QLatin1String pattern, size_t n, const ArgBase **args);
1530 
1531 template <typename StringView, typename...Args>
1532 [[nodiscard]] Q_ALWAYS_INLINE QString argToQStringDispatch(StringView pattern, const Args &...args)
1533 {
1534  const ArgBase *argBases[] = {&args..., /* avoid zero-sized array */ nullptr};
1535  return QtPrivate::argToQString(pattern, sizeof...(Args), argBases);
1536 }
1537 
1539 constexpr inline QStringViewArg qStringLikeToArg(QStringView s) noexcept { return QStringViewArg{s}; }
1540  inline QStringViewArg qStringLikeToArg(const QChar &c) noexcept { return QStringViewArg{QStringView{&c, 1}}; }
1541 constexpr inline QLatin1StringArg qStringLikeToArg(QLatin1String s) noexcept { return QLatin1StringArg{s}; }
1542 
1543 } // namespace QtPrivate
1544 
1545 template <typename...Args>
1546 Q_ALWAYS_INLINE
1548 {
1550 }
1551 
1552 template <typename...Args>
1553 Q_ALWAYS_INLINE
1555 {
1557 }
1558 
1559 template <typename T>
1561 {
1562  return QtPrivate::sequential_erase(s, t);
1563 }
1564 
1565 template <typename Predicate>
1567 {
1568  return QtPrivate::sequential_erase_if(s, pred);
1569 }
1570 
1571 inline namespace QtLiterals {
1572 inline QString operator"" _qs(const char16_t *str, size_t size) noexcept
1573 {
1574  return QString(QStringPrivate(nullptr, const_cast<char16_t *>(str), qsizetype(size)));
1575 }
1576 } // QtLiterals
1577 
1579 
1580 #if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER)
1581 #include <QtCore/qstringbuilder.h>
1582 #endif
1583 
1584 #endif // QSTRING_H
small capitals from c petite p scientific i
[1]
Definition: afcover.h:80
#define value
[5]
constexpr QChar back() const
Definition: qstring.h:381
QString toString() const
Definition: qstring.h:1204
constexpr QAnyStringView() noexcept
constexpr QChar front() const
Definition: qstring.h:377
QString toString() const
Definition: qstring.h:1190
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:85
QT_ASCII_CAST_WARN bool operator<(const QString &s2) const
Definition: qstring.h:1420
QT_ASCII_CAST_WARN bool operator>(const QString &s2) const
Definition: qstring.h:1422
QT_ASCII_CAST_WARN bool operator!=(const QString &s2) const
Definition: qstring.h:1418
QT_ASCII_CAST_WARN bool operator==(const QString &s2) const
Definition: qstring.h:1416
QT_ASCII_CAST_WARN bool operator<=(const QString &s2) const
Definition: qstring.h:1424
QT_ASCII_CAST_WARN bool operator>=(const QString &s2) const
Definition: qstring.h:1426
The QChar class provides a 16-bit Unicode character.
Definition: qchar.h:84
UnicodeVersion
Definition: qchar.h:439
@ Unicode_Unassigned
Definition: qchar.h:440
The QDataStream class provides serialization of binary data to a QIODevice.
Definition: qdatastream.h:66
The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
Definition: qstring.h:84
constexpr const char * latin1() const noexcept
Definition: qstring.h:96
constexpr bool startsWith(QChar c) const noexcept
Definition: qstring.h:126
constexpr QLatin1String sliced(qsizetype pos) const
Definition: qstring.h:207
qsizetype size_type
Definition: qstring.h:173
bool startsWith(QLatin1String s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:124
friend bool operator==(QChar lhs, QLatin1String rhs) noexcept
Definition: qstring.h:249
constexpr QLatin1String(QByteArrayView s) noexcept
Definition: qstring.h:92
constexpr const_iterator cbegin() const noexcept
Definition: qstring.h:176
QT_ASCII_CAST_WARN friend bool operator!=(const char *s1, QLatin1String s2)
Definition: qstring.h:297
friend bool operator!=(QLatin1String lhs, QStringView rhs) noexcept
Definition: qstring.h:274
qsizetype indexOf(QStringView s, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:140
constexpr qsizetype size() const noexcept
Definition: qstring.h:97
friend bool operator==(QLatin1String s1, QLatin1String s2) noexcept
Definition: qstring.h:231
bool endsWith(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:131
const_reverse_iterator crbegin() const noexcept
Definition: qstring.h:184
friend bool operator>(QLatin1String s1, QLatin1String s2) noexcept
Definition: qstring.h:241
constexpr int compare(QChar c) const noexcept
Definition: qstring.h:117
constexpr auto tokenize(Needle &&needle, Flags...flags) const noexcept(noexcept(qTokenize(std::declval< const QLatin1String & >(), std::forward< Needle >(needle), flags...))) -> decltype(qTokenize(*this, std::forward< Needle >(needle), flags...))
Definition: qstring.h:226
constexpr QLatin1Char at(qsizetype i) const
Definition: qstring.h:106
constexpr QLatin1String right(qsizetype n) const
Definition: qstring.h:200
friend bool operator>=(QLatin1String lhs, QChar rhs) noexcept
Definition: qstring.h:261
qsizetype lastIndexOf(QChar c, qsizetype from, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:164
value_type & reference
Definition: qstring.h:168
constexpr QLatin1String chopped(qsizetype n) const
Definition: qstring.h:215
constexpr const char * data() const noexcept
Definition: qstring.h:98
friend bool operator<(QLatin1String s1, QLatin1String s2) noexcept
Definition: qstring.h:235
friend bool operator!=(QStringView lhs, QLatin1String rhs) noexcept
Definition: qstring.h:266
constexpr QLatin1String(const char *f, const char *l)
Definition: qstring.h:88
qsizetype lastIndexOf(QLatin1String s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:158
constexpr void chop(qsizetype n)
Definition: qstring.h:218
std::reverse_iterator< iterator > reverse_iterator
Definition: qstring.h:180
friend bool operator<=(QChar lhs, QLatin1String rhs) noexcept
Definition: qstring.h:253
int compare(QLatin1String other, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:115
constexpr bool isNull() const noexcept
Definition: qstring.h:100
int compare(QStringView other, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:113
friend bool operator<=(QStringView lhs, QLatin1String rhs) noexcept
Definition: qstring.h:268
constexpr QLatin1String(const char *s, qsizetype sz) noexcept
Definition: qstring.h:90
bool startsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
Definition: qstring.h:128
value_type * iterator
Definition: qstring.h:170
constexpr void truncate(qsizetype n)
Definition: qstring.h:220
constexpr QLatin1Char front() const
Definition: qstring.h:110
friend bool operator>=(QLatin1String lhs, QStringView rhs) noexcept
Definition: qstring.h:278
constexpr QLatin1String last(qsizetype n) const
Definition: qstring.h:213
friend bool operator!=(QLatin1String s1, QLatin1String s2) noexcept
Definition: qstring.h:233
QString toString() const
Definition: qstring.h:1159
constexpr bool endsWith(QChar c) const noexcept
Definition: qstring.h:135
const_reverse_iterator crend() const noexcept
Definition: qstring.h:186
friend bool operator<=(QLatin1String s1, QLatin1String s2) noexcept
Definition: qstring.h:243
QLatin1String(const QByteArray &s) noexcept
Definition: qstring.h:91
QString arg(Args &&...args) const
constexpr const_iterator end() const noexcept
Definition: qstring.h:177
const_reverse_iterator rend() const noexcept
Definition: qstring.h:185
friend bool operator<=(QLatin1String lhs, QStringView rhs) noexcept
Definition: qstring.h:276
constexpr QLatin1String sliced(qsizetype pos, qsizetype n) const
Definition: qstring.h:209
QT_ASCII_CAST_WARN friend bool operator<=(const char *s1, QLatin1String s2)
Definition: qstring.h:300
constexpr QLatin1String first(qsizetype n) const
Definition: qstring.h:211
bool endsWith(QChar c, Qt::CaseSensitivity cs) const noexcept
Definition: qstring.h:137
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:162
qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:144
qsizetype difference_type
Definition: qstring.h:172
qsizetype indexOf(QLatin1String s, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:142
friend bool operator<=(QLatin1String lhs, QChar rhs) noexcept
Definition: qstring.h:260
friend bool operator!=(QChar lhs, QLatin1String rhs) noexcept
Definition: qstring.h:252
friend bool operator==(QLatin1String lhs, QStringView rhs) noexcept
Definition: qstring.h:272
QT_ASCII_CAST_WARN friend bool operator==(const char *s1, QLatin1String s2)
Definition: qstring.h:296
friend bool operator>=(QChar lhs, QLatin1String rhs) noexcept
Definition: qstring.h:254
const_reverse_iterator rbegin() const noexcept
Definition: qstring.h:183
qsizetype lastIndexOf(QStringView s, qsizetype from, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:156
constexpr QLatin1String() noexcept
Definition: qstring.h:86
friend bool operator==(QStringView lhs, QLatin1String rhs) noexcept
Definition: qstring.h:264
friend bool operator>=(QStringView lhs, QLatin1String rhs) noexcept
Definition: qstring.h:270
constexpr QLatin1String(const char *s) noexcept
Definition: qstring.h:87
friend bool operator==(QLatin1String lhs, QChar rhs) noexcept
Definition: qstring.h:256
friend bool operator>=(QLatin1String s1, QLatin1String s2) noexcept
Definition: qstring.h:245
constexpr const_iterator begin() const noexcept
Definition: qstring.h:175
bool contains(QLatin1String s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:149
reference const_reference
Definition: qstring.h:169
bool contains(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:147
constexpr QLatin1String left(qsizetype n) const
Definition: qstring.h:194
reverse_iterator const_reverse_iterator
Definition: qstring.h:181
qsizetype lastIndexOf(QLatin1String s, qsizetype from, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:160
constexpr QLatin1Char back() const
Definition: qstring.h:111
const char value_type
Definition: qstring.h:167
friend bool operator!=(QLatin1String lhs, QChar rhs) noexcept
Definition: qstring.h:257
constexpr QLatin1String mid(qsizetype pos, qsizetype n=-1) const
Definition: qstring.h:188
iterator const_iterator
Definition: qstring.h:171
bool startsWith(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:122
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:151
int compare(QChar c, Qt::CaseSensitivity cs) const noexcept
Definition: qstring.h:119
constexpr QLatin1Char operator[](qsizetype i) const
Definition: qstring.h:108
QT_ASCII_CAST_WARN friend bool operator>=(const char *s1, QLatin1String s2)
Definition: qstring.h:301
constexpr const_iterator cend() const noexcept
Definition: qstring.h:178
bool endsWith(QLatin1String s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:133
qsizetype lastIndexOf(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:154
QLatin1String trimmed() const noexcept
Definition: qstring.h:223
constexpr bool isEmpty() const noexcept
Definition: qstring.h:101
The QRegularExpression class provides pattern matching using regular expressions.
The QRegularExpressionMatch class provides the results of a matching a QRegularExpression against a s...
The QString class provides a Unicode character string.
Definition: qstring.h:388
bool startsWith(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:591
friend bool operator<(const QString &s1, const QString &s2) noexcept
Definition: qstring.h:882
QT_ASCII_CAST_WARN friend bool operator<=(const char *s1, const QString &s2)
Definition: qstring.h:1019
friend bool operator>(const QString &s1, const QString &s2) noexcept
Definition: qstring.h:884
friend bool operator==(const QString &s1, const char16_t *s2) noexcept
Definition: qstring.h:920
friend bool operator!=(std::nullptr_t, const QString &s2) noexcept
Definition: qstring.h:914
iterator begin()
Definition: qstring.h:1331
std::u32string toStdU32String() const
Definition: qstring.h:1475
QByteArray toLatin1() const &
Definition: qstring.h:745
QString & prepend(QChar c)
Definition: qstring.h:656
friend bool operator!=(const QString &s1, const QString &s2) noexcept
Definition: qstring.h:885
bool isDetached() const
Definition: qstring.h:1238
const QChar operator[](qsizetype i) const
Definition: qstring.h:1214
friend bool operator==(QChar lhs, const QString &rhs) noexcept
Definition: qstring.h:935
QChar * iterator
Definition: qstring.h:1025
friend bool operator<=(const QString &s1, std::nullptr_t) noexcept
Definition: qstring.h:911
QString last(qsizetype n) const
Definition: qstring.h:578
qsizetype count() const
Definition: qstring.h:414
void push_front(QChar c)
Definition: qstring.h:1056
QChar & reference
Definition: qstring.h:1050
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:514
friend bool operator!=(const QString &lhs, QChar rhs) noexcept
Definition: qstring.h:947
QString & prepend(QLatin1String s)
Definition: qstring.h:662
const_iterator constEnd() const
Definition: qstring.h:1345
static QString fromLatin1(const char *str, qsizetype size)
Definition: qstring.h:768
QT_ASCII_CAST_WARN QString & append(const QByteArray &s)
Definition: qstring.h:986
const_reverse_iterator rbegin() const
Definition: qstring.h:1041
std::wstring toStdWString() const
Definition: qstring.h:1455
int toInt(bool *ok=nullptr, int base=10) const
Definition: qstring.h:848
static Q_WEAK_OVERLOAD QString fromLocal8Bit(const QByteArray &ba)
Definition: qstring.h:789
QT_ASCII_CAST_WARN QString(const char *ch)
Definition: qstring.h:968
void reserve(qsizetype size)
Definition: qstring.h:1307
friend bool operator>=(QLatin1String s1, const QString &s2) noexcept
Definition: qstring.h:904
QString toLower() &&
Definition: qstring.h:613
static QString fromStdU16String(const std::u16string &s)
Definition: qstring.h:1466
static QString fromLatin1(QByteArrayView ba)
Definition: qstring.cpp:5488
const QChar & const_reference
Definition: qstring.h:1049
QString & prepend(const QChar *uc, qsizetype len)
Definition: qstring.h:657
friend bool operator!=(const QString &s1, const char16_t *s2) noexcept
Definition: qstring.h:921
QChar * pointer
Definition: qstring.h:1051
QT_ASCII_CAST_WARN QString(const QByteArray &a)
Definition: qstring.h:971
static QString fromStdString(const std::string &s)
Definition: qstring.h:1452
QString & prepend(QStringView v)
Definition: qstring.h:661
qsizetype toWCharArray(wchar_t *array) const
QString trimmed() &&
Definition: qstring.h:625
QString & insert(qsizetype i, QStringView v)
Definition: qstring.h:645
QString & insert(qsizetype i, const QString &s)
Definition: qstring.h:643
QByteArray toUtf8() &&
Definition: qstring.h:751
friend bool operator!=(const QString &s1, QLatin1String s2) noexcept
Definition: qstring.h:895
QString & prepend(const QString &s)
Definition: qstring.h:659
qsizetype lastIndexOf(QStringView s, qsizetype from, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:528
friend bool operator==(const QString &s1, const QString &s2) noexcept
Definition: qstring.h:880
iterator Iterator
Definition: qstring.h:1027
QString(DataPointer &&dd)
Definition: qstring.h:1087
static int compare(QStringView s1, const QString &s2, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Definition: qstring.h:834
void push_front(const QString &s)
Definition: qstring.h:1057
static int compare(QLatin1String s1, const QString &s2, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Definition: qstring.h:829
qsizetype indexOf(QStringView s, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:512
void clear()
Definition: qstring.h:1240
const QChar * constData() const
Definition: qstring.h:1234
ushort toUShort(bool *ok=nullptr, int base=10) const
Definition: qstring.h:846
QT_ASCII_CAST_WARN QString & operator+=(const char *s)
Definition: qstring.h:992
friend bool operator>=(const QString &s1, const char16_t *s2) noexcept
Definition: qstring.h:925
qsizetype size_type
Definition: qstring.h:1047
const DataPointer & data_ptr() const
Definition: qstring.h:1152
friend bool operator<=(const QString &lhs, QChar rhs) noexcept
Definition: qstring.h:950
QString(QString &&other) noexcept=default
friend bool operator<=(std::nullptr_t, const QString &s2) noexcept
Definition: qstring.h:917
bool isValidUtf16() const noexcept
Definition: qstring.h:1083
friend bool operator>=(const QString &s1, const QString &s2) noexcept
Definition: qstring.h:887
const_iterator cbegin() const
Definition: qstring.h:1335
friend bool operator>=(const QString &s1, QLatin1String s2) noexcept
Definition: qstring.h:897
QString & operator+=(QStringView v)
Definition: qstring.h:669
QString toCaseFolded() const &
Definition: qstring.h:619
reverse_iterator rend()
Definition: qstring.h:1040
bool isNull() const
Definition: qstring.h:1078
qsizetype size() const
Definition: qstring.h:413
QT_ASCII_CAST_WARN friend bool operator==(const char *s1, const QString &s2)
Definition: qstring.h:1011
std::string toStdString() const
Definition: qstring.h:1449
const QChar * const_pointer
Definition: qstring.h:1052
QT_ASCII_CAST_WARN friend bool operator!=(const char *s1, const QString &s2)
Definition: qstring.h:1013
uint toUInt(bool *ok=nullptr, int base=10) const
Definition: qstring.h:850
const_iterator cend() const
Definition: qstring.h:1343
friend bool operator!=(const QString &s1, std::nullptr_t) noexcept
Definition: qstring.h:908
qsizetype lastIndexOf(QLatin1String s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition: qstring.h:517
void push_back(QChar c)
Definition: qstring.h:1054
QString & removeIf(Predicate pred)
Definition: qstring.h:677
friend bool operator==(const char16_t *s1, const QString &s2) noexcept
Definition: qstring.h:927
friend bool operator>=(std::nullptr_t, const QString &s2) noexcept
Definition: qstring.h:918
QString simplified() &&
Definition: qstring.h:629
QStringPrivate DataPointer
Definition: qstring.h:391
static QString fromUtf8(QByteArrayView utf8)
Definition: qstring.cpp:5632
QT_ASCII_CAST_WARN QString & prepend(const QByteArray &s)
Definition: qstring.h:982
QString ::type arg(Args &&...args) const
Definition: qstring.h:501
QByteArray toLatin1() &&
Definition: qstring.h:747
SectionFlag
Definition: qstring.h:558
QString section(QChar sep, qsizetype start, qsizetype end=-1, SectionFlags flags=SectionDefault) const
Definition: qstring.h:1272
QString first(qsizetype n) const
Definition: qstring.h:576
friend bool operator!=(QChar lhs, const QString &rhs) noexcept
Definition: qstring.h:942
friend bool operator!=(const char16_t *s1, const QString &s2) noexcept
Definition: qstring.h:928
constexpr QString() noexcept
Definition: qstring.h:1304
bool isSharedWith(const QString &other) const
Definition: qstring.h:435
QString & append(QStringView v)
Definition: qstring.h:653
qsizetype capacity() const
Definition: qstring.h:1244
QString simplified() const &
Definition: qstring.h:627
friend bool operator==(std::nullptr_t, const QString &s2) noexcept
Definition: qstring.h:913
const_reverse_iterator crbegin() const
Definition: qstring.h:1043
QChar back() const
Definition: qstring.h:444
QT_ASCII_CAST_WARN QString & append(const char *s)
Definition: qstring.h:984
iterator end()
Definition: qstring.h:1339
friend bool operator==(QLatin1String s1, const QString &s2) noexcept
Definition: qstring.h:899
static QString fromLocal8Bit(const char *str, qsizetype size)
Definition: qstring.h:790
friend bool operator!=(QLatin1String s1, const QString &s2) noexcept
Definition: qstring.h:902
static int compare(const QString &s1, QStringView s2, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Definition: qstring.h:832
void detach()
Definition: qstring.h:1236
QString toUpper() &&
Definition: qstring.h:617
static int compare(const QString &s1, QLatin1String s2, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Definition: qstring.h:826
long toLong(bool *ok=nullptr, int base=10) const
Definition: qstring.h:852
localeAwareCompare
const QChar at(qsizetype i) const
Definition: qstring.h:1212
friend bool operator>=(const char16_t *s1, const QString &s2) noexcept
Definition: qstring.h:932
QT_ASCII_CAST_WARN QString & insert(qsizetype i, const char *s)
Definition: qstring.h:988
QChar front() const
Definition: qstring.h:442
bool isEmpty() const
Definition: qstring.h:1216
friend bool operator>=(QChar lhs, const QString &rhs) noexcept
Definition: qstring.h:944
short toShort(bool *ok=nullptr, int base=10) const
Definition: qstring.h:844
int compare(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.cpp:6263
void shrink_to_fit()
Definition: qstring.h:1058
static QString fromWCharArray(const wchar_t *string, qsizetype size=-1)
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=QLatin1Char(' ')) const
Definition: qstring.cpp:8318
QT_ASCII_CAST_WARN QString & prepend(const char *s)
Definition: qstring.h:980
QString & operator+=(const QString &s)
Definition: qstring.h:667
QString sliced(qsizetype pos, qsizetype n) const
Definition: qstring.h:582
DataPointer & data_ptr()
Definition: qstring.h:1151
const_reverse_iterator crend() const
Definition: qstring.h:1044
QT_ASCII_CAST_WARN friend bool operator>=(const char *s1, const QString &s2)
Definition: qstring.h:1021
QString toLower() const &
Definition: qstring.h:611
qsizetype lastIndexOf(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition: qstring.h:521
static QString fromStdU32String(const std::u32string &s)
Definition: qstring.h:1472
QByteArray toLocal8Bit() const &
Definition: qstring.h:753
auto tokenize(Needle &&needle, Flags...flags) const &&noexcept(noexcept(qTokenize(std::declval< const QString >(), std::forward< Needle >(needle), flags...))) -> decltype(qTokenize(std::move(*this), std::forward< Needle >(needle), flags...))
Definition: qstring.h:720
void push_back(const QString &s)
Definition: qstring.h:1055
QChar * data()
Definition: qstring.h:1228
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition: qstring.h:1353
QString sliced(qsizetype pos) const
Definition: qstring.h:580
friend bool operator<=(QLatin1String s1, const QString &s2) noexcept
Definition: qstring.h:903
friend bool operator<=(QChar lhs, const QString &rhs) noexcept
Definition: qstring.h:943
void squeeze()
Definition: qstring.h:1315
QString & setUtf16(const ushort *utf16, qsizetype size)
Definition: qstring.h:1325
auto tokenize(Needle &&needle, Flags...flags) &&noexcept(noexcept(qTokenize(std::declval< QString >(), std::forward< Needle >(needle), flags...))) -> decltype(qTokenize(std::move(*this), std::forward< Needle >(needle), flags...))
Definition: qstring.h:726
std::u16string toStdU16String() const
Definition: qstring.h:1469
QString trimmed() const &
Definition: qstring.h:623
QString & setNum(short, int base=10)
Definition: qstring.h:1245
QString chopped(qsizetype n) const
Definition: qstring.h:584
friend bool operator<=(const QString &s1, QLatin1String s2) noexcept
Definition: qstring.h:896
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: qstring.h:1030
friend bool operator==(const QString &s1, QLatin1String s2) noexcept
Definition: qstring.h:889
qptrdiff difference_type
Definition: qstring.h:1048
static int compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Definition: qstring.h:822
ulong toULong(bool *ok=nullptr, int base=10) const
Definition: qstring.h:854
static QString fromUtf8(const char *utf8, qsizetype size)
Definition: qstring.h:775
QT_ASCII_CAST_WARN QString & insert(qsizetype i, const QByteArray &s)
Definition: qstring.h:990
QT_ASCII_CAST_WARN QString & operator=(const char *ch)
Definition: qstring.h:974
QByteArray toUtf8() const &
Definition: qstring.h:749
static Q_WEAK_OVERLOAD QString fromLatin1(const QByteArray &ba)
Definition: qstring.h:767
friend bool operator<=(const char16_t *s1, const QString &s2) noexcept
Definition: qstring.h:931
QT_ASCII_CAST_WARN QString & operator+=(const QByteArray &s)
Definition: qstring.h:994
static int localeAwareCompare(const QString &s1, const QString &s2)
Definition: qstring.h:839
QStringList split(const QRegularExpression &sep, Qt::SplitBehavior behavior=Qt::KeepEmptyParts) const
static QString fromStdWString(const std::wstring &s)
Definition: qstring.h:1463
friend bool operator>=(const QString &, std::nullptr_t) noexcept
Definition: qstring.h:912
friend bool operator==(const QString &s1, std::nullptr_t) noexcept
Definition: qstring.h:907
QByteArray toLocal8Bit() &&
Definition: qstring.h:755
auto tokenize(Needle &&needle, Flags...flags) const &noexcept(noexcept(qTokenize(std::declval< const QString & >(), std::forward< Needle >(needle), flags...))) -> decltype(qTokenize(*this, std::forward< Needle >(needle), flags...))
Definition: qstring.h:714
QString toUpper() const &
Definition: qstring.h:615
std::reverse_iterator< iterator > reverse_iterator
Definition: qstring.h:1029
const_reverse_iterator rend() const
Definition: qstring.h:1042
const_iterator constBegin() const
Definition: qstring.h:1337
QString toCaseFolded() &&
Definition: qstring.h:621
friend bool operator>=(const QString &lhs, QChar rhs) noexcept
Definition: qstring.h:951
QT_ASCII_CAST_WARN QString & operator=(const QByteArray &a)
Definition: qstring.h:976
NormalizationForm
Definition: qstring.h:732
@ NormalizationForm_KD
Definition: qstring.h:735
@ NormalizationForm_C
Definition: qstring.h:734
@ NormalizationForm_D
Definition: qstring.h:733
friend bool operator==(const QString &lhs, QChar rhs) noexcept
Definition: qstring.h:946
const_iterator ConstIterator
Definition: qstring.h:1028
qsizetype lastIndexOf(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:526
qsizetype length() const
Definition: qstring.h:415
QString & operator+=(QChar c)
Definition: qstring.h:664
reverse_iterator rbegin()
Definition: qstring.h:1039
friend bool operator<=(const QString &s1, const QString &s2) noexcept
Definition: qstring.h:886
QString & operator+=(QLatin1String s)
Definition: qstring.h:670
const QChar * unicode() const
Definition: qstring.h:1218
int compare(QChar ch, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:819
const QChar * const_iterator
Definition: qstring.h:1026
~QString()
Definition: qstring.h:1305
friend bool operator<=(const QString &s1, const char16_t *s2) noexcept
Definition: qstring.h:924
bool endsWith(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstring.h:599
void resize(qsizetype size)
Definition: qstring.cpp:2670
static Q_WEAK_OVERLOAD QString fromUtf8(const QByteArray &ba)
Definition: qstring.h:774
QChar value_type
Definition: qstring.h:1053
The QStringList class provides a list of strings.
The QStringView class provides a unified view on UTF-16 strings with a read-only subset of the QStrin...
Definition: qstringview.h:122
bool contains(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstringview.h:334
bool startsWith(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstringview.h:312
ushort toUShort(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1182
QString arg(Args &&...args) const
bool endsWith(QStringView s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstringview.h:320
QString toString() const
Definition: qstring.h:1165
int toInt(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1176
qlonglong toLongLong(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1168
ulong toULong(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1174
bool isValidUtf16() const noexcept
Definition: qstringview.h:387
int compare(QStringView other, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstringview.h:304
qulonglong toULongLong(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1170
short toShort(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1180
qsizetype lastIndexOf(QChar c, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstringview.h:345
uint toUInt(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1178
qsizetype indexOf(QChar c, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const noexcept
Definition: qstringview.h:328
long toLong(bool *ok=nullptr, int base=10) const
Definition: qstring.h:1172
qsizetype toWCharArray(wchar_t *array) const
Definition: base.h:37
#define T(x)
Definition: main.cpp:42
#define this
Definition: dialogs.cpp:56
map insert("Paris", "France")
b clear()
QString str
[2]
a resize(100000)
list append(new Employee("Blackpool", "Stephen"))
set reserve(20000)
int const char * version
Definition: zlib.h:814
auto it unsigned count const
Definition: hb-iter.hh:848
#define Null(Type)
Definition: hb-null.hh:106
#define inline
Definition: md4c.c:45
Generic::PredicateMatcher< T > Predicate(std::function< bool(T const &)> const &predicate, std::string const &description="")
Definition: catch_p_p.h:3521
std::string toLower(std::string const &s)
QHighDpiScaling::Point position(T, QHighDpiScaling::Point::Kind)
qsizetype fromUtf8(uchar b, OutputPtr &dst, InputPtr &src, InputPtr end)
int toUtf8(char16_t u, OutputPtr &dst, InputPtr &src, InputPtr end)
Definition: qnamespace.h:55
CaseSensitivity
Definition: qnamespace.h:1282
@ CaseSensitive
Definition: qnamespace.h:1284
@ KeepEmptyParts
Definition: qnamespace.h:152
Initialization
Definition: qnamespace.h:1610
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool endsWith(QByteArrayView haystack, QByteArrayView needle) noexcept
constexpr bool isLatin1(QLatin1String s) noexcept
Definition: qstring.h:328
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION QByteArrayView trimmed(QByteArrayView s) noexcept
auto sequential_erase_if(Container &c, Predicate &pred)
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool startsWith(QByteArrayView haystack, QByteArrayView needle) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype lastIndexOf(QByteArrayView haystack, qsizetype from, QByteArrayView needle) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool equalStrings(QStringView lhs, QStringView rhs) noexcept
Definition: qstring.cpp:1430
QStringViewArg qStringLikeToArg(const QString &s) noexcept
Definition: qstring.h:1538
Q_CORE_EXPORT QString convertToQString(QAnyStringView s)
Definition: qstring.cpp:5250
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION qsizetype findString(QStringView haystack, qsizetype from, QStringView needle, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Definition: qstring.cpp:10414
constexpr QLatin1StringArg qStringLikeToArg(QLatin1String s) noexcept
Definition: qstring.h:1541
auto sequential_erase(Container &c, const T &t)
Q_CORE_EXPORT QString argToQString(QStringView pattern, size_t n, const ArgBase **args)
Definition: qstring.cpp:8744
Q_CORE_EXPORT QString argToQString(QLatin1String pattern, size_t n, const ArgBase **args)
Definition: qstring.cpp:8749
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber< float > toFloat(QByteArrayView a) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION ParsedNumber< double > toDouble(QByteArrayView a) noexcept
QString && asString(QString &&s)
Definition: qstring.h:1503
Q_ALWAYS_INLINE QString argToQStringDispatch(StringView pattern, const Args &...args)
Definition: qstring.h:1532
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isRightToLeft(QStringView string) noexcept
Definition: qstring.cpp:10187
Definition: qfloat16.h:381
#define QString()
Definition: parse-defines.h:51
PCRE2_SIZE PRIV() strlen(PCRE2_SPTR str)
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d &reg2 endm macro vzip8 reg2 vzip d d &reg2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld endif[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1 beq endif SRC MASK if dst_r_bpp DST_R else add endif PF add sub src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head pixblock_size cache_preload_simple process_pixblock_tail pixinterleave dst_w_basereg irp beq endif process_pixblock_tail_head tst beq irp if pixblock_size chunk_size tst beq pixld SRC pixld MASK if DST_R else pixld DST_R endif if
void
Definition: png.h:1080
QString & operator+=(QString &that, const ProString &other)
Definition: proitems.h:262
size_t qstrlen(const char *str)
#define Q_DECL_NS_RETURNS_AUTORELEASED
#define QT_WARNING_DISABLE_INTEL(number)
#define Q_DECL_CF_RETURNS_RETAINED
#define Q_WEAK_OVERLOAD
#define QT_WARNING_POP
#define QT_WARNING_PUSH
Q_FORWARD_DECLARE_OBJC_CLASS(NSObject)
Q_FORWARD_DECLARE_CF_TYPE(CTFontDescriptor)
EGLOutputLayerEXT EGLint EGLAttrib value
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition: qflags.h:210
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition: qflags.h:227
Flags
QT_BEGIN_INCLUDE_NAMESPACE typedef unsigned char uchar
Definition: qglobal.h:332
unsigned long ulong
Definition: qglobal.h:335
ptrdiff_t qptrdiff
Definition: qglobal.h:307
quint64 qulonglong
Definition: qglobal.h:302
unsigned long long quint64
Definition: qglobal.h:299
ptrdiff_t qsizetype
Definition: qglobal.h:308
unsigned int uint
Definition: qglobal.h:334
#define QT_DEPRECATED_VERSION_X_6_0(text)
Definition: qglobal.h:444
long long qint64
Definition: qglobal.h:298
unsigned short ushort
Definition: qglobal.h:333
#define QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(Class)
Definition: qglobal.h:563
qint64 qlonglong
Definition: qglobal.h:301
GLenum GLuint GLenum GLsizei length
Definition: qopengl.h:270
GLenum type
Definition: qopengl.h:270
GLsizei const GLfloat * v
[13]
GLenum mode
GLboolean r
[2]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLuint end
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat s1
GLenum GLenum GLsizei count
GLfloat GLfloat f
GLenum src
GLint GLsizei width
GLbitfield flags
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint start
GLint first
GLfloat n
GLint GLsizei GLsizei GLenum format
GLsizei GLenum const void * indices
const GLubyte * c
Definition: qopenglext.h:12701
GLuint GLfloat * val
Definition: qopenglext.h:1513
GLenum array
Definition: qopenglext.h:7028
GLenum GLsizei len
Definition: qopenglext.h:3292
GLdouble GLdouble t
[9]
Definition: qopenglext.h:243
GLint GLenum GLboolean normalized
Definition: qopenglext.h:752
GLuint64EXT * result
[6]
Definition: qopenglext.h:10932
GLdouble s
[6]
Definition: qopenglext.h:235
GLuint GLenum option
Definition: qopenglext.h:5929
GLubyte * pattern
Definition: qopenglext.h:2744
GLenum GLint GLint * precision
Definition: qopenglext.h:1890
GLsizei const GLchar *const * string
[0]
Definition: qopenglext.h:694
#define Q_ASSERT(cond)
Definition: qrandom.cpp:84
Q_DECLARE_TYPEINFO(QLatin1String, Q_RELOCATABLE_TYPE)
qsizetype erase_if(QString &s, Predicate pred)
Definition: qstring.h:1566
QT_WARNING_PUSH QT_WARNING_DISABLE_MSVC(4127) QT_WARNING_DISABLE_INTEL(111) inline qsizetype QString
Definition: qstring.h:1276
Q_CORE_EXPORT QDataStream & operator>>(QDataStream &, QString &)
Definition: qstring.cpp:10116
const QString operator+(const QString &s1, const QString &s2)
Definition: qstring.h:1431
Q_CORE_EXPORT QDataStream & operator<<(QDataStream &, const QString &)
Definition: qstring.cpp:10084
qsizetype erase(QString &s, const T &t)
Definition: qstring.h:1560
@ Data
QArrayDataPointer< char16_t > QStringPrivate
constexpr auto qTokenize(Haystack &&h, Needle &&n, Flags...flags) noexcept(QtPrivate::Tok::is_nothrow_constructible_from< Haystack, Needle >::value) -> decltype(QtPrivate::Tok::TokenizerResult< Haystack, Needle >{std::forward< Haystack >(h), std::forward< Needle >(n), flags...})
QStringView qToStringViewIgnoringNull(const QStringLike &s) noexcept
Definition: qstringview.h:480
#define s2
#define s1
Tag
Definition: qtranslator.cpp:78
#define Q_DECLARE_SHARED(TYPE)
Definition: qtypeinfo.h:197
@ Q_RELOCATABLE_TYPE
Definition: qtypeinfo.h:156
#define explicit
#define U8(v)
QByteArray ba
[0]
settings remove("monkey")
QTextStream out(stdout)
[7]
QObject::connect nullptr
ba fill(true)
list prepend("one")
QSharedPointer< T > other(t)
[5]
this swap(other)
Definition: main.cpp:58
The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
Definition: qchar.h:53
constexpr QLatin1StringArg(QLatin1String v) noexcept
Definition: qstring.h:1525
constexpr QStringViewArg(QStringView v) noexcept
Definition: qstring.h:1519
Definition: main.cpp:38
#define rhs
XmlOutput::xml_output tag(const QString &name)
Definition: xmloutput.h:154