diff options
author | Andy Nichols <andy.nichols@qt.io> | 2023-06-05 12:17:02 +0000 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2023-06-06 06:12:53 +0200 |
commit | 4d261c1b544330c5481b2ac2e42fbab764255ab5 (patch) | |
tree | 70c53c6c0a9c0fefe9b02d26e9d78370e32461fe /src | |
parent | 88de6960747aa567c6947913f9e5715cfb972d46 (diff) |
Revert "QStringBuilder: remove unneeded specializations"
This reverts commit 3c6c3eccd1f91bd1ae0a518318ef264f8eff63f5.
Reason for revert: They do appear to be needed, and removing them
changes behavior: QTBUG-114206
Pick-to: 6.6
Fixes: QTBUG-114206
Task-number: QTBUG-114238
Change-Id: Iac75bbc1ef14fe89f4282bd58fe996f9a09b8506
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/text/qstringbuilder.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/corelib/text/qstringbuilder.h b/src/corelib/text/qstringbuilder.h index f7900f4f58..79b854cdb4 100644 --- a/src/corelib/text/qstringbuilder.h +++ b/src/corelib/text/qstringbuilder.h @@ -100,6 +100,45 @@ public: const B &b; }; +// This specialization is here for backwards compatibility: appending +// two null strings must give back a null string, so we're special +// casing this one out. +template <> +class QStringBuilder <QString, QString> : public QStringBuilderBase<QStringBuilder<QString, QString>, QString> +{ + public: + QStringBuilder(const QString &a_, const QString &b_) : a(a_), b(b_) {} + QStringBuilder(const QStringBuilder &other) : a(other.a), b(other.b) {} + + operator QString() const + { QString r(a); r += b; return r; } + + const QString &a; + const QString &b; + + private: + QStringBuilder &operator=(const QStringBuilder &) = delete; +}; + +// Ditto, but see QTBUG-114238 +template <> +class QStringBuilder <QByteArray, QByteArray> : public QStringBuilderBase<QStringBuilder<QByteArray, QByteArray>, QByteArray> +{ + public: + QStringBuilder(const QByteArray &a_, const QByteArray &b_) : a(a_), b(b_) {} + QStringBuilder(const QStringBuilder &other) : a(other.a), b(other.b) {} + + operator QByteArray() const + { QByteArray r(a); r += b; return r; } + + const QByteArray &a; + const QByteArray &b; + + private: + QStringBuilder &operator=(const QStringBuilder &) = delete; +}; + + template <> struct QConcatenable<char> : private QAbstractConcatenable { typedef char type; |