summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@qt.io>2023-06-05 12:17:02 +0000
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2023-06-06 06:12:53 +0200
commit4d261c1b544330c5481b2ac2e42fbab764255ab5 (patch)
tree70c53c6c0a9c0fefe9b02d26e9d78370e32461fe /src
parent88de6960747aa567c6947913f9e5715cfb972d46 (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.h39
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;