diff --git a/src/libs/utils/qstringbuilder.h b/src/libs/utils/qstringbuilder.h
index b160ad4345b1b2876767ab638ed7e896605ddad7..ffe120cca5358df809b9aaffdf6fb72e5d780d09 100644
--- a/src/libs/utils/qstringbuilder.h
+++ b/src/libs/utils/qstringbuilder.h
@@ -88,10 +88,17 @@ private:
 
 
 template <typename A, typename B>
-class QStringBuilderPair;
+class QStringBuilderPair
+{
+public:
+    QStringBuilderPair(const A &a_, const B &b_) : a(a_), b(b_) {}
 
-template <typename A, typename B>
-inline int qStringBuilderSize(const QStringBuilderPair<A, B> &p);
+    const A &a;
+    const B &b;
+};
+
+
+namespace Qt {
 
 inline int qStringBuilderSize(const char) { return 1; }
 
@@ -105,13 +112,22 @@ inline int qStringBuilderSize(const QString &a) { return a.size(); }
 
 inline int qStringBuilderSize(const QStringRef &a) { return a.size(); }
 
-
 template <typename A, typename B>
-inline void qStringBuilderAppend(const QStringBuilderPair<A, B> &p, QChar *&out);
+inline int qStringBuilderSize(const QStringBuilderPair<A, B> &p)
+{
+    return qStringBuilderSize(p.a) + qStringBuilderSize(p.b);
+}
 
-inline void qStringBuilderAppend(const char c, QChar *&out) { *out++ = QLatin1Char(c); }
 
-inline void qStringBuilderAppend(const QLatin1Char c, QChar *&out) { *out++ = c; }
+inline void qStringBuilderAppend(const char c, QChar *&out)
+{
+    *out++ = QLatin1Char(c);
+}
+
+inline void qStringBuilderAppend(const QLatin1Char c, QChar *&out)
+{
+    *out++ = c;
+}
 
 inline void qStringBuilderAppend(const QLatin1String &a, QChar *&out)
 {
@@ -139,6 +155,15 @@ inline void qStringBuilderAppend(const QLatin1Literal &a, QChar *&out)
         *out++ = QLatin1Char(*s++);
 }
 
+template <typename A, typename B>
+inline void qStringBuilderAppend(const QStringBuilderPair<A, B> &p, QChar *&out)
+{
+    qStringBuilderAppend(p.a, out);
+    qStringBuilderAppend(p.b, out);
+}
+
+} // Qt
+
 
 template <typename A>
 class QStringBuilder : public A
@@ -152,43 +177,15 @@ public:
         QString s(this->size(), QChar(-1));
 #else
         QString s;
-        s.resize(this->size());
+        s.resize(Qt::qStringBuilderSize(*this));
 #endif
         QChar *d = s.data();
-        qStringBuilderAppend(*this, d);
+        Qt::qStringBuilderAppend(*this, d);
         return s;
     }
 
 };
 
-template <>
-class QStringBuilder<QString>
-{
-public:
-    QStringBuilder(const QString &a_) : a(&a_) {}
-
-    inline operator QString() const { return *a; }
-
-private:
-    const QString *a;
-};
-
-
-
-template <typename A, typename B>
-class QStringBuilderPair
-{
-public:
-    QStringBuilderPair(const A &a_, const B &b_) : a(a_), b(b_) {}
-
-    inline int size() const
-    {
-        return qStringBuilderSize(a) + qStringBuilderSize(b);
-    }
-//private:
-    const A &a;
-    const B &b;
-};
 
 template <typename A, typename B>
 QStringBuilder< QStringBuilderPair<A, B> >
@@ -197,18 +194,6 @@ operator%(const A &a, const B &b)
     return QStringBuilderPair<A, B> (a, b);
 }
 
-template <typename A, typename B>
-inline void qStringBuilderAppend(const QStringBuilderPair<A, B> &p, QChar *&out)
-{
-    qStringBuilderAppend(p.a, out);
-    qStringBuilderAppend(p.b, out);
-}
-
-template <typename A, typename B>
-inline int qStringBuilderSize(const QStringBuilderPair<A, B> &p)
-{
-    return qStringBuilderSize(p.a) + qStringBuilderSize(p.b);
-}
 
 QT_END_NAMESPACE
 
diff --git a/tests/benchmarks/qstringbuilder/main.cpp b/tests/benchmarks/qstringbuilder/main.cpp
index d5aea2d96c3fad283a3c578efc418c67d762e974..b8f087346b36b5c17d5ebd273a3fdf7167608349 100644
--- a/tests/benchmarks/qstringbuilder/main.cpp
+++ b/tests/benchmarks/qstringbuilder/main.cpp
@@ -124,11 +124,11 @@ private slots:
     }
     void b_string_l1string() {
         QBENCHMARK { r = string % l1string; }
-        COMPARE(r, string + l1literal);
+        COMPARE(r, string + l1string);
     }
     void s_string_l1literal() {
-        QBENCHMARK { r = string + l1literal; }
-        COMPARE(r, QString(string % l1string));
+        QBENCHMARK { r = string + l1string; }
+        COMPARE(r, QString(string % l1literal));
     }
     void s_string_l1string() {
         QBENCHMARK { r = string + l1string; }