summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2021-04-15 14:31:46 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-04-19 07:05:17 +0000
commit6e8a74712fd28b466ea99bf205c9447cb53c0d2b (patch)
tree5cd0fe8bcb09b4d8d9891d1dbf9378ecc5720b8f
parentbc0e309adc3e516c1465211c1e9472e7757b3299 (diff)
QString: add missing char8_t* constructor / fromUtf8 overloads
Currently we support: QString s = QString::fromUtf(u8"foo", 3); But we don't support QString s = QString::fromUtf8(u8"foo"); QString s(u8"foo"); There's no reason not to have these two functions. Guess what, we've actually got code _in Qt_ that tries to build a QString out of a char8_t; that code stops compiling under C++20 (which is supported, but not CI-tested at the moment, it seems). Re-add the missing constructor and fromUtf8 overloads. [ChangeLog][QtCore][QString] Added a constructor and a fromUtf8() overload taking a `const char8_t *` argument. Task-number: QTQAINFRA-4117 Task-number: QTQAINFRA-4242 Change-Id: I1f0ae658b3490b9e092941cabcc7fb8fc4c51aa3 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> (cherry picked from commit b322bfcc14845a4b6a6eef85ef359b1e4591a5ca) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/corelib/text/qstring.cpp18
-rw-r--r--src/corelib/text/qstring.h9
2 files changed, 27 insertions, 0 deletions
diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp
index fcdf687b99..745b963260 100644
--- a/src/corelib/text/qstring.cpp
+++ b/src/corelib/text/qstring.cpp
@@ -2190,6 +2190,16 @@ inline char qToLower(char ch)
\sa fromLatin1(), fromLocal8Bit(), fromUtf8()
*/
+/*! \fn QString::QString(const char8_t *str)
+
+ Constructs a string initialized with the UTF-8 string \a str. The
+ given const char8_t pointer is converted to Unicode using the
+ fromUtf8() function.
+
+ \since 6.1
+ \sa fromLatin1(), fromLocal8Bit(), fromUtf8()
+*/
+
/*! \fn QString QString::fromStdString(const std::string &str)
Returns a copy of the \a str string. The given string is converted
@@ -5327,6 +5337,14 @@ QString QString::fromLocal8Bit(QByteArrayView ba)
*/
/*!
+ \fn QString QString::fromUtf8(const char8_t *str)
+ \overload
+ \since 6.1
+
+ This overload is only available when compiling in C++20 mode.
+*/
+
+/*!
\fn QString QString::fromUtf8(const char8_t *str, qsizetype size)
\overload
\since 6.0
diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h
index 8926f6f3af..153a9e0475 100644
--- a/src/corelib/text/qstring.h
+++ b/src/corelib/text/qstring.h
@@ -386,6 +386,12 @@ public:
QString(QChar c);
QString(qsizetype size, QChar c);
inline QString(QLatin1String latin1);
+#if defined(__cpp_char8_t) || defined(Q_CLANG_QDOC)
+ Q_WEAK_OVERLOAD
+ inline QString(const char8_t *str)
+ : QString(fromUtf8(str))
+ {}
+#endif
inline QString(const QString &) noexcept;
inline ~QString();
QString &operator=(QChar c);
@@ -747,6 +753,9 @@ public:
}
#if defined(__cpp_char8_t) || defined(Q_CLANG_QDOC)
Q_WEAK_OVERLOAD
+ static inline QString fromUtf8(const char8_t *str)
+ { return fromUtf8(reinterpret_cast<const char *>(str)); }
+ Q_WEAK_OVERLOAD
static inline QString fromUtf8(const char8_t *str, qsizetype size)
{ return fromUtf8(reinterpret_cast<const char *>(str), size); }
#endif