chart2/qa/extras/chart2dump/chart2dump.cxx                   |    4 
 chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx |    2 
 chart2/source/tools/PolynomialRegressionCurveCalculator.cxx  |    2 
 compilerplugins/clang/stringview.cxx                         |   24 ++++-
 compilerplugins/clang/test/stringview.cxx                    |    6 +
 connectivity/source/drivers/firebird/PreparedStatement.cxx   |    2 
 connectivity/source/parse/sqlnode.cxx                        |    2 
 cppu/source/uno/lbenv.cxx                                    |    2 
 cui/source/dialogs/scriptdlg.cxx                             |    4 
 dbaccess/source/ui/dlg/dbwizsetup.cxx                        |    4 
 dbaccess/source/ui/dlg/directsql.cxx                         |   10 +-
 desktop/source/pkgchk/unopkg/unopkg_app.cxx                  |    6 -
 desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx               |   16 +--
 desktop/source/pkgchk/unopkg/unopkg_misc.cxx                 |    4 
 framework/source/uielement/subtoolbarcontroller.cxx          |    2 
 i18nlangtag/source/languagetag/languagetag.cxx               |    2 
 i18npool/source/indexentry/indexentrysupplier.cxx            |    4 
 i18npool/source/localedata/LocaleNode.cxx                    |    2 
 include/rtl/string.hxx                                       |   12 ++
 include/rtl/stringconcat.hxx                                 |   42 +++++++++
 include/rtl/ustring.hxx                                      |   12 ++
 l10ntools/source/po.cxx                                      |    2 
 linguistic/source/dicimp.cxx                                 |    2 
 oox/source/core/xmlfilterbase.cxx                            |    4 
 oox/source/export/drawingml.cxx                              |   12 +-
 oox/source/export/shapes.cxx                                 |    2 
 oox/source/ole/vbaexport.cxx                                 |   12 +-
 sal/qa/rtl/strings/test_oustring_compare.cxx                 |    4 
 sal/qa/rtl/textenc/rtl_textcvt.cxx                           |   34 +++----
 sc/qa/extras/macros-test.cxx                                 |    2 
 sc/source/filter/excel/xecontent.cxx                         |    2 
 sc/source/filter/excel/xelink.cxx                            |    2 
 sd/qa/unit/import-tests.cxx                                  |    2 
 sd/source/core/drawdoc3.cxx                                  |    2 
 sd/source/filter/eppt/pptx-epptooxml.cxx                     |   20 ++--
 sdext/source/presenter/PresenterHelpView.cxx                 |    2 
 sfx2/source/appl/newhelp.cxx                                 |    2 
 sfx2/source/view/classificationhelper.cxx                    |    2 
 shell/source/backends/desktopbe/desktopbackend.cxx           |    2 
 stoc/source/implementationregistration/implreg.cxx           |   16 +--
 svl/source/misc/lockfilecommon.cxx                           |    2 
 svl/source/misc/msodocumentlockfile.cxx                      |    2 
 svl/source/numbers/zformat.cxx                               |    4 
 svtools/source/dialogs/PlaceEditDialog.cxx                   |    2 
 svtools/source/dialogs/ServerDetailsControls.cxx             |    2 
 svtools/source/svhtml/HtmlWriter.cxx                         |    4 
 svx/source/gallery2/gallerybinaryengineentry.cxx             |    2 
 sw/qa/extras/globalfilter/globalfilter.cxx                   |    2 
 sw/qa/extras/uiwriter/uiwriter.cxx                           |    2 
 sw/source/core/crsr/crossrefbookmark.cxx                     |    2 
 sw/source/core/edit/edfcol.cxx                               |    2 
 sw/source/filter/ascii/ascatr.cxx                            |    2 
 sw/source/filter/html/css1atr.cxx                            |    8 -
 sw/source/filter/html/htmlatr.cxx                            |   48 +++++------
 sw/source/filter/html/htmldrawwriter.cxx                     |    2 
 sw/source/filter/html/htmlfldw.cxx                           |    4 
 sw/source/filter/html/htmlflywriter.cxx                      |   24 ++---
 sw/source/filter/html/htmlforw.cxx                           |    8 -
 sw/source/filter/html/htmlftn.cxx                            |   10 +-
 sw/source/filter/html/htmlnumwriter.cxx                      |    4 
 sw/source/filter/html/htmlplug.cxx                           |   16 +--
 sw/source/filter/html/htmltabw.cxx                           |   42 ++++-----
 sw/source/filter/html/wrthtml.cxx                            |   18 ++--
 sw/source/filter/ww8/docxattributeoutput.cxx                 |   10 +-
 sw/source/filter/ww8/docxexport.cxx                          |    4 
 sw/source/filter/ww8/ww8par5.cxx                             |    2 
 sw/source/ui/dbui/dbinsdlg.cxx                               |    2 
 sw/source/ui/dbui/mmaddressblockpage.cxx                     |    2 
 sw/source/ui/index/cnttab.cxx                                |    2 
 unoidl/source/unoidl-check.cxx                               |    4 
 unoidl/source/unoidl-read.cxx                                |    2 
 unotest/source/cpp/gettestargument.cxx                       |    2 
 unotest/source/cpp/macros_test.cxx                           |    4 
 vcl/source/app/brand.cxx                                     |    4 
 vcl/source/image/ImplImageTree.cxx                           |    2 
 vcl/source/window/dialog.cxx                                 |    4 
 writerfilter/source/ooxml/OOXMLDocumentImpl.cxx              |    2 
 writerperfect/qa/unit/ImportTest.cxx                         |    2 
 xmlsecurity/source/helper/documentsignaturehelper.cxx        |   16 +--
 79 files changed, 325 insertions(+), 241 deletions(-)

New commits:
commit ad1557f5d775739230e0e2252c293948977b42a0
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Thu Sep 30 13:54:26 2021 +0200
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Sun Oct 3 19:50:44 2021 +0200

    A more lightweight O[U]StringConcatenation
    
    ...compared to a full-blown O[U]String, for temporary objects holding an
    O[U]StringConcat result that can then be used as a std::[u16]string_view.
    
    It's instructive to see how some invocations of operator ==, operator !=, 
and
    O[U]StringBuffer::insert with an O[U]StringConcat argument required implicit
    materialization of an O[U]String temporary, and how that expensive 
operation has
    now been made explicit with the explicit O[U]StringConcatenation ctor.
    
    (The additional operator == and operator != overloads are necessary because 
the
    overloads taking two std::[u16]string_view parameters wouldn't even be found
    here with ADL.  And the OUString-related ones would cause ambiguities in at
    least sal/qa/rtl/strings/test_oustring_stringliterals.cxx built with
    RTL_STRING_UNITTEST, so have simply been disabled for that special test-code
    case.)
    
    Change-Id: Id29799fa8da21a09ff9794cbc7cc9b366e6803b8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122890
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/chart2/qa/extras/chart2dump/chart2dump.cxx 
b/chart2/qa/extras/chart2dump/chart2dump.cxx
index fc3944f494e3..4d40c9cc3f8b 100644
--- a/chart2/qa/extras/chart2dump/chart2dump.cxx
+++ b/chart2/qa/extras/chart2dump/chart2dump.cxx
@@ -125,7 +125,7 @@ protected:
         {
             if (m_aReferenceFile.is_open())
                 m_aReferenceFile.close();
-            OString sReferenceFile = 
OUStringToOString(OUString(m_directories.getPathFromSrc(getReferenceDirName()) 
+ sFileName), RTL_TEXTENCODING_UTF8);
+            OString sReferenceFile = 
OUStringToOString(OUStringConcatenation(m_directories.getPathFromSrc(getReferenceDirName())
 + sFileName), RTL_TEXTENCODING_UTF8);
             m_aReferenceFile.open(sReferenceFile.getStr(), std::ios_base::in);
             CPPUNIT_ASSERT_MESSAGE(OString("Can't open reference file: " + 
sReferenceFile).getStr(), m_aReferenceFile.is_open());
         }
@@ -133,7 +133,7 @@ protected:
         {
             if (m_aDumpFile.is_open())
                 m_aDumpFile.close();
-            OString sDumpFile = 
OUStringToOString(OUString(m_directories.getPathFromSrc(getReferenceDirName()) 
+ sFileName), RTL_TEXTENCODING_UTF8);
+            OString sDumpFile = 
OUStringToOString(OUStringConcatenation(m_directories.getPathFromSrc(getReferenceDirName())
 + sFileName), RTL_TEXTENCODING_UTF8);
             m_aDumpFile.open(sDumpFile.getStr(), std::ios_base::out | 
std::ofstream::binary | std::ofstream::trunc);
             CPPUNIT_ASSERT_MESSAGE(OString("Can't open dump file: " + 
sDumpFile).getStr(), m_aDumpFile.is_open());
         }
diff --git a/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx 
b/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx
index c9e000e0243e..1e84ed81d42d 100644
--- a/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/LogarithmicRegressionCurveCalculator.cxx
@@ -178,7 +178,7 @@ OUString 
LogarithmicRegressionCurveCalculator::ImplGetRepresentation(
         addStringToEquation( aBuf, nLineLength, aTmpBuf, pFormulaMaxWidth );
     }
 
-    if ( aBuf.toString() == (mYName + " = ") )
+    if ( aBuf.toString() == OUStringConcatenation(mYName + " = ") )
         aBuf.append( "0" );
 
     return aBuf.makeStringAndClear();
diff --git a/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx 
b/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx
index d6b22c1635f5..2c2e6be4b5bf 100644
--- a/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/PolynomialRegressionCurveCalculator.cxx
@@ -381,7 +381,7 @@ OUString 
PolynomialRegressionCurveCalculator::ImplGetRepresentation(
         }
         addStringToEquation( aBuf, nLineLength, aTmpBuf, pFormulaMaxWidth );
     }
-    if ( aBuf.toString() == ( mYName + " = ") )
+    if ( aBuf.toString() == OUStringConcatenation( mYName + " = ") )
         aBuf.append( "0" );
 
     return aBuf.makeStringAndClear();
diff --git a/compilerplugins/clang/stringview.cxx 
b/compilerplugins/clang/stringview.cxx
index 0c060ce93513..4043d7a67e60 100644
--- a/compilerplugins/clang/stringview.cxx
+++ b/compilerplugins/clang/stringview.cxx
@@ -162,7 +162,13 @@ void StringView::handleSubExprThatCouldBeView(Expr const* 
subExpr)
 void StringView::handleCXXConstructExpr(CXXConstructExpr const* expr)
 {
     QualType argType;
-    bool charArg = false;
+    enum
+    {
+        None,
+        OrChar,
+        ViaConcatenation
+    } extra
+        = None;
     auto const d = expr->getConstructor();
     switch (d->getNumParams())
     {
@@ -174,7 +180,7 @@ void StringView::handleCXXConstructExpr(CXXConstructExpr 
const* expr)
             if (t->isAnyCharacterType())
             {
                 argType = expr->getArg(0)->IgnoreImplicit()->getType();
-                charArg = true;
+                extra = OrChar;
                 break;
             }
             loplugin::TypeCheck tc(t);
@@ -195,6 +201,13 @@ void StringView::handleCXXConstructExpr(CXXConstructExpr 
const* expr)
                 argType = expr->getArg(0)->IgnoreImplicit()->getType();
                 break;
             }
+            if 
(tc.RvalueReference().Struct("OStringConcat").Namespace("rtl").GlobalNamespace()
+                || 
tc.RvalueReference().Struct("OUStringConcat").Namespace("rtl").GlobalNamespace())
+            {
+                argType = expr->getArg(0)->IgnoreImplicit()->getType();
+                extra = ViaConcatenation;
+                break;
+            }
             return;
         }
         case 2:
@@ -214,7 +227,7 @@ void StringView::handleCXXConstructExpr(CXXConstructExpr 
const* expr)
                         {
                             if (val->getExtValue() == 1)
                             {
-                                charArg = true;
+                                extra = OrChar;
                             }
                         }
                     }
@@ -239,13 +252,14 @@ void StringView::handleCXXConstructExpr(CXXConstructExpr 
const* expr)
     report(DiagnosticsEngine::Warning,
            "instead of an %0%select{| constructed from a %2}1, pass a"
            " '%select{std::string_view|std::u16string_view}3'"
-           "%select{| (or an 
'%select{rtl::OStringChar|rtl::OUStringChar}3')}4",
+           "%select{| (or an '%select{rtl::OStringChar|rtl::OUStringChar}3')|"
+           " via 
'%select{rtl::OStringConcatenation|rtl::OUStringConcatenation}3'}4",
            expr->getExprLoc())
         << expr->getType() << (argType.isNull() ? 0 : 1) << argType
         << 
(loplugin::TypeCheck(expr->getType()).Class("OString").Namespace("rtl").GlobalNamespace()
                 ? 0
                 : 1)
-        << charArg << expr->getSourceRange();
+        << extra << expr->getSourceRange();
 }
 
 void StringView::handleCXXMemberCallExpr(CXXMemberCallExpr const* expr)
diff --git a/compilerplugins/clang/test/stringview.cxx 
b/compilerplugins/clang/test/stringview.cxx
index 34accb6e6448..be7b8db3ea95 100644
--- a/compilerplugins/clang/test/stringview.cxx
+++ b/compilerplugins/clang/test/stringview.cxx
@@ -99,7 +99,7 @@ void f4(OUString s1, OUString s2)
 }
 }
 
-void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2)
+void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2, 
OString s3, OUString s4)
 {
     // expected-error@+1 {{instead of an 'rtl::OString', pass a 
'std::string_view' [loplugin:stringview]}}
     call_view(OString());
@@ -118,6 +118,8 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, 
sal_Int32 n2)
     call_view(OString(std::string_view("foo")));
     // expected-error@+1 {{instead of an 'rtl::OString' constructed from a 
'OStringNumber<int>', pass a 'std::string_view' [loplugin:stringview]}}
     call_view(OString(OString::number(0)));
+    // expected-error-re@+1 {{instead of an 'rtl::OString' constructed from a 
'typename std::enable_if_t<ToStringHelper<OString>::allowOStringConcat && 
ToStringHelper<OString>::allowOStringConcat, OStringConcat<OString, OString>{{ 
?}}>' (aka 'rtl::OStringConcat<rtl::OString, rtl::OString>'), pass a 
'std::string_view' via 'rtl::OStringConcatenation' [loplugin:stringview]}}
+    call_view(OString(s3 + s3));
     // expected-error@+1 {{instead of an 'rtl::OUString', pass a 
'std::u16string_view' [loplugin:stringview]}}
     call_view(OUString());
     // expected-error@+1 {{instead of an 'rtl::OUString' constructed from a 
'const char [4]', pass a 'std::u16string_view' [loplugin:stringview]}}
@@ -141,6 +143,8 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, 
sal_Int32 n2)
     call_view(OUString(std::u16string_view(u"foo")));
     // expected-error@+1 {{instead of an 'rtl::OUString' constructed from a 
'OUStringNumber<int>', pass a 'std::u16string_view' [loplugin:stringview]}}
     call_view(OUString(OUString::number(0)));
+    // expected-error-re@+1 {{instead of an 'rtl::OUString' constructed from a 
'typename std::enable_if_t<ToStringHelper<OUString>::allowOUStringConcat && 
ToStringHelper<OUString>::allowOUStringConcat, OUStringConcat<OUString, 
OUString>{{ ?}}>' (aka 'rtl::OUStringConcat<rtl::OUString, rtl::OUString>'), 
pass a 'std::u16string_view' via 'rtl::OUStringConcatenation' 
[loplugin:stringview]}}
+    call_view(OUString(s4 + s4));
 }
 
 void f5(OUString s)
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx 
b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 483ad14b0e0e..8d08a207a67c 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -563,7 +563,7 @@ void 
OPreparedStatement::openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QU
     if (aErr)
     {
         evaluateStatusVector(m_statusVector,
-                             OUString("setBlob failed on " + m_sSqlStatement),
+                             OUStringConcatenation("setBlob failed on " + 
m_sSqlStatement),
                              *this);
         assert(false);
     }
diff --git a/connectivity/source/parse/sqlnode.cxx 
b/connectivity/source/parse/sqlnode.cxx
index 9902c571b7ea..86daec34ccc0 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -374,7 +374,7 @@ bool OSQLParseNode::parseNodeToExecutableStatement( 
OUString& _out_rString, cons
     {
         constexpr char SELECT_KEYWORD[] = "SELECT";
         sBuffer.insert(sBuffer.indexOf(SELECT_KEYWORD) + 
strlen(SELECT_KEYWORD),
-                " FIRST " + sLimitValue);
+                OUStringConcatenation(" FIRST " + sLimitValue));
     }
 
     _out_rString = sBuffer.makeStringAndClear();
diff --git a/cppu/source/uno/lbenv.cxx b/cppu/source/uno/lbenv.cxx
index c9a2d89933d5..5cbfc252c901 100644
--- a/cppu/source/uno/lbenv.cxx
+++ b/cppu/source/uno/lbenv.cxx
@@ -779,7 +779,7 @@ extern "C" void SAL_CALL uno_dumpEnvironmentByName(
     {
         writeLine(
             stream,
-            OUString("environment \"" + OUString::unacquired(&pEnvDcp) + "\" 
does not exist!"),
+            OUStringConcatenation("environment \"" + 
OUString::unacquired(&pEnvDcp) + "\" does not exist!"),
             pFilter );
     }
 }
diff --git a/cui/source/dialogs/scriptdlg.cxx b/cui/source/dialogs/scriptdlg.cxx
index f4d347b0ef84..4b4092f9c760 100644
--- a/cui/source/dialogs/scriptdlg.cxx
+++ b/cui/source/dialogs/scriptdlg.cxx
@@ -756,7 +756,7 @@ void SvxScriptOrgDialog::createEntry(const weld::TreeIter& 
rEntry)
             }
             for( const Reference< browse::XBrowseNode >& n : 
std::as_const(childNodes) )
             {
-                if (aNewName+extn == n->getName())
+                if (OUStringConcatenation(aNewName+extn) == n->getName())
                 {
                     bFound = true;
                     break;
@@ -783,7 +783,7 @@ void SvxScriptOrgDialog::createEntry(const weld::TreeIter& 
rEntry)
                 bValid = true;
                 for( const Reference< browse::XBrowseNode >& n : 
std::as_const(childNodes) )
                 {
-                    if (aUserSuppliedName+extn == n->getName())
+                    if (OUStringConcatenation(aUserSuppliedName+extn) == 
n->getName())
                     {
                         bValid = false;
                         OUString aError = m_createErrStr + m_createDupStr;
diff --git a/dbaccess/source/ui/dlg/dbwizsetup.cxx 
b/dbaccess/source/ui/dlg/dbwizsetup.cxx
index 7707408f4288..c04218620e9c 100644
--- a/dbaccess/source/ui/dlg/dbwizsetup.cxx
+++ b/dbaccess/source/ui/dlg/dbwizsetup.cxx
@@ -815,7 +815,7 @@ bool ODbTypeWizDialogSetup::SaveDatabaseDocument()
             if (bFolderExists)
             {
                 i++;
-                pURL->setName(OUString(sLastSegmentName + 
OUString::number(i)));
+                pURL->setName(OUStringConcatenation(sLastSegmentName + 
OUString::number(i)));
             }
         }
     }
@@ -833,7 +833,7 @@ bool ODbTypeWizDialogSetup::SaveDatabaseDocument()
             bElementExists = xSimpleFileAccess->exists( 
aExistenceCheck.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
             if ( bElementExists )
             {
-                aExistenceCheck.setBase( OUString(BaseName + OUString::number( 
i ) ));
+                aExistenceCheck.setBase( OUStringConcatenation(BaseName + 
OUString::number( i ) ));
                 ++i;
             }
         }
diff --git a/dbaccess/source/ui/dlg/directsql.cxx 
b/dbaccess/source/ui/dlg/directsql.cxx
index 7a59a1d2c76d..604cb1716d02 100644
--- a/dbaccess/source/ui/dlg/directsql.cxx
+++ b/dbaccess/source/ui/dlg/directsql.cxx
@@ -211,7 +211,7 @@ namespace dbaui
                 }
                 else
                     addOutputText(
-                        OUString(OUString::number(xMR->getUpdateCount()) + " 
rows updated\n"));
+                        
OUStringConcatenation(OUString::number(xMR->getUpdateCount()) + " rows 
updated\n"));
                 for (;;)
                 {
                     hasRS = xMR->getMoreResults();
@@ -231,17 +231,17 @@ namespace dbaui
                 if (upperStatement.startsWith("UPDATE"))
                 {
                     sal_Int32 resultCount = 
xStatement->executeUpdate(_rStatement);
-                    addOutputText(OUString(OUString::number(resultCount) + " 
rows updated\n"));
+                    
addOutputText(OUStringConcatenation(OUString::number(resultCount) + " rows 
updated\n"));
                 }
                 else if (upperStatement.startsWith("INSERT"))
                 {
                     sal_Int32 resultCount = 
xStatement->executeUpdate(_rStatement);
-                    addOutputText(OUString(OUString::number(resultCount) + " 
rows inserted\n"));
+                    
addOutputText(OUStringConcatenation(OUString::number(resultCount) + " rows 
inserted\n"));
                 }
                 else if (upperStatement.startsWith("DELETE"))
                 {
                     sal_Int32 resultCount = 
xStatement->executeUpdate(_rStatement);
-                    addOutputText(OUString(OUString::number(resultCount) + " 
rows deleted\n"));
+                    
addOutputText(OUStringConcatenation(OUString::number(resultCount) + " rows 
deleted\n"));
                 }
                 else if (upperStatement.startsWith("CREATE"))
                 {
@@ -257,7 +257,7 @@ namespace dbaui
                 else
                 {
                     sal_Int32 resultCount = 
xStatement->executeUpdate(_rStatement);
-                    addOutputText(OUString(OUString::number(resultCount) + " 
rows updated\n"));
+                    
addOutputText(OUStringConcatenation(OUString::number(resultCount) + " rows 
updated\n"));
                 }
             }
             // successful
diff --git a/desktop/source/pkgchk/unopkg/unopkg_app.cxx 
b/desktop/source/pkgchk/unopkg/unopkg_app.cxx
index 857902dd4f4e..a28b94b5888d 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_app.cxx
+++ b/desktop/source/pkgchk/unopkg/unopkg_app.cxx
@@ -271,7 +271,7 @@ extern "C" int unopkg_main()
                     if (cmdArg[ 0 ] == '-')
                     {
                         // is option:
-                        dp_misc::writeConsoleError(OUString(
+                        dp_misc::writeConsoleError(OUStringConcatenation(
                                  "\nERROR: unexpected option " +
                                  cmdArg +
                                  "!\n       Use " APP_NAME " " +
@@ -478,7 +478,7 @@ extern "C" int unopkg_main()
                       vec_packages.size(), false);
 
                 dp_misc::writeConsole(
-                    OUString("All deployed " + repository + " 
extensions:\n\n"));
+                    OUStringConcatenation("All deployed " + repository + " 
extensions:\n\n"));
             }
             else
             {
@@ -612,7 +612,7 @@ extern "C" int unopkg_main()
     catch (const LockFileException & e)
     {
         // No logger since it requires UNO which we don't have here
-        dp_misc::writeConsoleError(OUString(e.Message + "\n"));
+        dp_misc::writeConsoleError(OUStringConcatenation(e.Message + "\n"));
         bShowFailedMsg = false;
     }
     catch (const css::uno::Exception & e ) {
diff --git a/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx 
b/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx
index 2180695d85b7..cca5b7ae3365 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx
+++ b/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx
@@ -142,9 +142,9 @@ void CommandEnvironmentImpl::printLicense(
 
     OUString sNewLine("\n");
 
-    dp_misc::writeConsole(OUString(sNewLine + sNewLine + s1 + sNewLine + 
sNewLine));
-    dp_misc::writeConsole(OUString(sLicense + sNewLine + sNewLine));
-    dp_misc::writeConsole(OUString(s2 + sNewLine));
+    dp_misc::writeConsole(OUStringConcatenation(sNewLine + sNewLine + s1 + 
sNewLine + sNewLine));
+    dp_misc::writeConsole(OUStringConcatenation(sLicense + sNewLine + 
sNewLine));
+    dp_misc::writeConsole(OUStringConcatenation(s2 + sNewLine));
     dp_misc::writeConsole(s3);
 
     //the user may enter "yes" or "no", we compare in a case insensitive way
@@ -171,7 +171,7 @@ void CommandEnvironmentImpl::printLicense(
         }
         else
         {
-            dp_misc::writeConsole(OUString(sNewLine + sNewLine + s4 + 
sNewLine));
+            dp_misc::writeConsole(OUStringConcatenation(sNewLine + sNewLine + 
s4 + sNewLine));
         }
     }
     while(true);
@@ -257,7 +257,7 @@ void CommandEnvironmentImpl::handle(
     {
         OUString sMsg(DpResId(RID_STR_UNSUPPORTED_PLATFORM));
         sMsg = sMsg.replaceAll("%Name", platExc.package->getDisplayName());
-        dp_misc::writeConsole(OUString("\n" + sMsg + "\n\n"));
+        dp_misc::writeConsole(OUStringConcatenation("\n" + sMsg + "\n\n"));
         approve = true;
     }
     else {
@@ -275,7 +275,7 @@ void CommandEnvironmentImpl::handle(
     if (abort && m_option_verbose)
     {
         OUString msg = ::comphelper::anyToString(request);
-        dp_misc::writeConsoleError(OUString("\nERROR: " + msg + "\n"));
+        dp_misc::writeConsoleError(OUStringConcatenation("\nERROR: " + msg + 
"\n"));
     }
 
     // select:
@@ -348,9 +348,9 @@ void CommandEnvironmentImpl::update_( Any const & Status )
     }
 
     if (bUseErr)
-        dp_misc::writeConsoleError(OUString(msg + "\n"));
+        dp_misc::writeConsoleError(OUStringConcatenation(msg + "\n"));
     else
-        dp_misc::writeConsole(OUString(msg + "\n"));
+        dp_misc::writeConsole(OUStringConcatenation(msg + "\n"));
 }
 
 
diff --git a/desktop/source/pkgchk/unopkg/unopkg_misc.cxx 
b/desktop/source/pkgchk/unopkg/unopkg_misc.cxx
index c2152928ceb2..402833aa5019 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_misc.cxx
+++ b/desktop/source/pkgchk/unopkg/unopkg_misc.cxx
@@ -229,7 +229,7 @@ void printf_line(
     std::u16string_view name, std::u16string_view value, sal_Int32 level )
 {
     printf_space( level );
-    dp_misc::writeConsole(OUString(OUString::Concat(name) + ": " + value + 
"\n"));
+    dp_misc::writeConsole(OUStringConcatenation(OUString::Concat(name) + ": " 
+ value + "\n"));
 }
 
 
@@ -359,7 +359,7 @@ Reference<XComponentContext> connectToOffice(
 
     if (verbose)
     {
-        dp_misc::writeConsole(OUString(
+        dp_misc::writeConsole(OUStringConcatenation(
             "Raising process: " + appURL +
             "\nArguments: --nologo --nodefault " + args[2] +
             "\n"));
diff --git a/framework/source/uielement/subtoolbarcontroller.cxx 
b/framework/source/uielement/subtoolbarcontroller.cxx
index bed772499951..e02e4631bd6b 100644
--- a/framework/source/uielement/subtoolbarcontroller.cxx
+++ b/framework/source/uielement/subtoolbarcontroller.cxx
@@ -167,7 +167,7 @@ void SubToolBarController::statusChanged( const 
css::frame::FeatureStateEvent& E
         {
             // Enum command, such as the current custom shape,
             // toggle checked state.
-            if ( m_aLastCommand == ( m_aCommandURL + "." + aStrValue ) )
+            if ( m_aLastCommand == OUStringConcatenation( m_aCommandURL + "." 
+ aStrValue ) )
             {
                 eTri = TRISTATE_TRUE;
                 nItemBits |= ToolBoxItemBits::CHECKABLE;
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx 
b/i18nlangtag/source/languagetag/languagetag.cxx
index 6175820bb546..1dbc383e52b2 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -1520,7 +1520,7 @@ void LanguageTag::convertFromRtlLocale()
     if (maLocale.Variant.isEmpty())
         return;
 
-    OString aStr = OUStringToOString(maLocale.Language, RTL_TEXTENCODING_UTF8) 
+ "_" + OUStringToOString(OUString(maLocale.Country + maLocale.Variant),
+    OString aStr = OUStringToOString(maLocale.Language, RTL_TEXTENCODING_UTF8) 
+ "_" + OUStringToOString(OUStringConcatenation(maLocale.Country + 
maLocale.Variant),
             RTL_TEXTENCODING_UTF8);
     /* FIXME: let liblangtag parse this entirely with
      * lt_tag_convert_from_locale() but that needs a patch to pass the
diff --git a/i18npool/source/indexentry/indexentrysupplier.cxx 
b/i18npool/source/indexentry/indexentrysupplier.cxx
index 9fa060ee3c85..bbaa2cc21c37 100644
--- a/i18npool/source/indexentry/indexentrysupplier.cxx
+++ b/i18npool/source/indexentry/indexentrysupplier.cxx
@@ -129,7 +129,7 @@ 
IndexEntrySupplier::getLocaleSpecificIndexEntrySupplier(const Locale& rLocale, c
             // Load service with name <base>_<lang>_<country>_<algorithm>
             // or <base>_<bcp47>_<algorithm> and fallbacks.
             bLoaded = createLocaleSpecificIndexEntrySupplier(
-                    OUString(
+                    OUStringConcatenation(
                         LocaleDataImpl::getFirstLocaleServiceName( rLocale) + 
"_"
                         + aSortAlgorithm));
             if (!bLoaded)
@@ -137,7 +137,7 @@ 
IndexEntrySupplier::getLocaleSpecificIndexEntrySupplier(const Locale& rLocale, c
                 ::std::vector< OUString > aFallbacks( 
LocaleDataImpl::getFallbackLocaleServiceNames( rLocale));
                 for (auto const& fallback : aFallbacks)
                 {
-                    bLoaded = 
createLocaleSpecificIndexEntrySupplier(OUString(fallback + "_" + 
aSortAlgorithm));
+                    bLoaded = 
createLocaleSpecificIndexEntrySupplier(OUStringConcatenation(fallback + "_" + 
aSortAlgorithm));
                     if (bLoaded)
                         break;
                 }
diff --git a/i18npool/source/localedata/LocaleNode.cxx 
b/i18npool/source/localedata/LocaleNode.cxx
index 0ae5978a75f5..8c23e3a29b21 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -798,7 +798,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) 
const
                         if (n100s < 0)
                             incErrorInt( "Error: Time100SecSeparator not 
present in FormatCode formatindex=\"%d\".\n",
                                     formatindex);
-                        n100s = aCode.indexOf( OUString(pSep->getValue() + 
"00"));
+                        n100s = aCode.indexOf( 
OUStringConcatenation(pSep->getValue() + "00"));
                         if (n100s < 0)
                             incErrorInt( "Error: Time100SecSeparator+00 not 
present in FormatCode formatindex=\"%d\".\n",
                                     formatindex);
diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx
index 1f3120e7b4e5..cebaa114517d 100644
--- a/include/rtl/string.hxx
+++ b/include/rtl/string.hxx
@@ -2146,6 +2146,17 @@ public:
 #endif
 };
 
+#if defined LIBO_INTERNAL_ONLY
+inline bool operator ==(OString const & lhs, OStringConcatenation const & rhs)
+{ return lhs == std::string_view(rhs); }
+inline bool operator !=(OString const & lhs, OStringConcatenation const & rhs)
+{ return lhs != std::string_view(rhs); }
+inline bool operator ==(OStringConcatenation const & lhs, OString const & rhs)
+{ return std::string_view(lhs) == rhs; }
+inline bool operator !=(OStringConcatenation const & lhs, OString const & rhs)
+{ return std::string_view(lhs) != rhs; }
+#endif
+
 /* ======================================================================= */
 
 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
@@ -2249,6 +2260,7 @@ typedef rtlunittest::OString OString;
 #if defined LIBO_INTERNAL_ONLY && !defined RTL_STRING_UNITTEST
 using ::rtl::OString;
 using ::rtl::OStringChar;
+using ::rtl::OStringConcatenation;
 using ::rtl::OStringHash;
 using ::rtl::OStringLiteral;
 #endif
diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx
index 554fdd3f4403..51605d0731e9 100644
--- a/include/rtl/stringconcat.hxx
+++ b/include/rtl/stringconcat.hxx
@@ -16,7 +16,9 @@
 #include "rtl/string.h"
 #include "rtl/ustring.h"
 
+#include <cassert>
 #include <cstddef>
+#include <memory>
 #include <string>
 #include <string_view>
 #include <type_traits>
@@ -353,6 +355,46 @@ int operator+( const StringConcatInvalid&, const T& )
     }
 #endif
 
+// Lightweight alternative to OString when a (temporary) object is needed to 
hold an OStringConcat
+// result that can then be used as a std::string_view:
+class OStringConcatenation {
+public:
+    template<typename T1, typename T2>
+    explicit OStringConcatenation(OStringConcat<T1, T2> const & c):
+        length_(c.length()),
+        buffer_(new char[length_])
+    {
+        auto const end = c.addData(buffer_.get());
+        assert(end == buffer_.get() + length_); (void)end;
+    }
+
+    operator std::string_view() const { return {buffer_.get(), length_}; }
+
+private:
+    std::size_t length_;
+    std::unique_ptr<char[]> buffer_;
+};
+
+// Lightweight alternative to OUString when a (temporary) object is needed to 
hold an
+// OUStringConcat result that can then be used as a std::u16string_view:
+class OUStringConcatenation {
+public:
+    template<typename T1, typename T2>
+    explicit OUStringConcatenation(OUStringConcat<T1, T2> const & c):
+        length_(c.length()),
+        buffer_(new char16_t[length_])
+    {
+        auto const end = c.addData(buffer_.get());
+        assert(end == buffer_.get() + length_); (void)end;
+    }
+
+    operator std::u16string_view() const { return {buffer_.get(), length_}; }
+
+private:
+    std::size_t length_;
+    std::unique_ptr<char16_t[]> buffer_;
+};
+
 /**
  @internal
 
diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx
index 96bb504f77a8..5fbf00d64a6d 100644
--- a/include/rtl/ustring.hxx
+++ b/include/rtl/ustring.hxx
@@ -3393,6 +3393,17 @@ void operator !=(OUString const &, std::nullptr_t) = 
delete;
 void operator !=(std::nullptr_t, OUString const &) = delete;
 #endif
 
+#if defined LIBO_INTERNAL_ONLY && !defined RTL_STRING_UNITTEST
+inline bool operator ==(OUString const & lhs, OUStringConcatenation const & 
rhs)
+{ return lhs == std::u16string_view(rhs); }
+inline bool operator !=(OUString const & lhs, OUStringConcatenation const & 
rhs)
+{ return lhs != std::u16string_view(rhs); }
+inline bool operator ==(OUStringConcatenation const & lhs, OUString const & 
rhs)
+{ return std::u16string_view(lhs) == rhs; }
+inline bool operator !=(OUStringConcatenation const & lhs, OUString const & 
rhs)
+{ return std::u16string_view(lhs) != rhs; }
+#endif
+
 #if defined LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
 /// @cond INTERNAL
 
@@ -3560,6 +3571,7 @@ using ::rtl::OStringToOUString;
 using ::rtl::OUStringToOString;
 using ::rtl::OUStringLiteral;
 using ::rtl::OUStringChar;
+using ::rtl::OUStringConcatenation;
 #endif
 
 /// @cond INTERNAL
diff --git a/l10ntools/source/po.cxx b/l10ntools/source/po.cxx
index bc4611b539ea..e935ab4831f8 100644
--- a/l10ntools/source/po.cxx
+++ b/l10ntools/source/po.cxx
@@ -221,7 +221,7 @@ void GenPoEntry::readFromFile(std::ifstream& rIFStream)
             {
                 sReference = m_sReferences.front();
             }
-            if (pLastMsg != &m_sMsgCtxt || sLine != "\"" + sReference + 
"\\n\"")
+            if (pLastMsg != &m_sMsgCtxt || sLine != OStringConcatenation("\"" 
+ sReference + "\\n\""))
             {
                 *pLastMsg += lcl_GenNormString(sLine);
             }
diff --git a/linguistic/source/dicimp.cxx b/linguistic/source/dicimp.cxx
index b2d28491c41d..20fe8bbadac1 100644
--- a/linguistic/source/dicimp.cxx
+++ b/linguistic/source/dicimp.cxx
@@ -448,7 +448,7 @@ ErrCode DictionaryNeo::saveEntries(const OUString &rURL)
         pStream->WriteLine("type: negative");
     if (aDicName.endsWith(EXTENSION_FOR_TITLE_TEXT))
     {
-        pStream->WriteLine(OString("title: " + OUStringToOString(
+        pStream->WriteLine(OStringConcatenation("title: " + OUStringToOString(
             // strip EXTENSION_FOR_TITLE_TEXT
             aDicName.subView(0, 
aDicName.lastIndexOf(EXTENSION_FOR_TITLE_TEXT)), eEnc)));
     }
diff --git a/oox/source/core/xmlfilterbase.cxx 
b/oox/source/core/xmlfilterbase.cxx
index 091c5c17e12e..371439b022a2 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -1176,7 +1176,7 @@ void XmlFilterBase::exportCustomFragments()
         const OUString fragmentPath = "customXml/item" + OUString::number(j+1) 
+ ".xml";
         if (customXmlDom.is())
         {
-            addRelation(oox::getRelationship(Relationship::CUSTOMXML), 
OUString("../" + fragmentPath));
+            addRelation(oox::getRelationship(Relationship::CUSTOMXML), 
OUStringConcatenation("../" + fragmentPath));
 
             uno::Reference<xml::sax::XSAXSerializable> 
serializer(customXmlDom, uno::UNO_QUERY);
             uno::Reference<xml::sax::XWriter> writer = 
xml::sax::Writer::create(comphelper::getProcessComponentContext());
@@ -1197,7 +1197,7 @@ void XmlFilterBase::exportCustomFragments()
             // Adding itemprops's relationship entry to item.xml.rels file
             addRelation(openFragmentStream(fragmentPath, "application/xml"),
                         oox::getRelationship(Relationship::CUSTOMXMLPROPS),
-                        OUString("itemProps"+OUString::number(j+1)+".xml"));
+                        
OUStringConcatenation("itemProps"+OUString::number(j+1)+".xml"));
         }
     }
 
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 2f8043aad2e7..4326ce2fa01d 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -5119,7 +5119,7 @@ void DrawingML::WriteDiagram(const 
css::uno::Reference<css::drawing::XShape>& rX
     OUString dataFileName = "diagrams/data" + OUString::number(nDiagramId) + 
".xml";
     OString dataRelId = OUStringToOString(
         mpFB->addRelation(mpFS->getOutputStream(), 
oox::getRelationship(Relationship::DIAGRAMDATA),
-                          OUString(sRelationCompPrefix + dataFileName)),
+                          OUStringConcatenation(sRelationCompPrefix + 
dataFileName)),
         RTL_TEXTENCODING_UTF8);
 
     // add layout relation
@@ -5127,7 +5127,7 @@ void DrawingML::WriteDiagram(const 
css::uno::Reference<css::drawing::XShape>& rX
     OString layoutRelId
         = OUStringToOString(mpFB->addRelation(mpFS->getOutputStream(),
                                               
oox::getRelationship(Relationship::DIAGRAMLAYOUT),
-                                              OUString(sRelationCompPrefix + 
layoutFileName)),
+                                              
OUStringConcatenation(sRelationCompPrefix + layoutFileName)),
                             RTL_TEXTENCODING_UTF8);
 
     // add style relation
@@ -5135,7 +5135,7 @@ void DrawingML::WriteDiagram(const 
css::uno::Reference<css::drawing::XShape>& rX
     OString styleRelId
         = OUStringToOString(mpFB->addRelation(mpFS->getOutputStream(),
                                               
oox::getRelationship(Relationship::DIAGRAMQUICKSTYLE),
-                                              OUString(sRelationCompPrefix + 
styleFileName)),
+                                              
OUStringConcatenation(sRelationCompPrefix + styleFileName)),
                             RTL_TEXTENCODING_UTF8);
 
     // add color relation
@@ -5143,7 +5143,7 @@ void DrawingML::WriteDiagram(const 
css::uno::Reference<css::drawing::XShape>& rX
     OString colorRelId
         = OUStringToOString(mpFB->addRelation(mpFS->getOutputStream(),
                                               
oox::getRelationship(Relationship::DIAGRAMCOLORS),
-                                              OUString(sRelationCompPrefix + 
colorFileName)),
+                                              
OUStringConcatenation(sRelationCompPrefix + colorFileName)),
                             RTL_TEXTENCODING_UTF8);
 
     OUString drawingFileName;
@@ -5153,7 +5153,7 @@ void DrawingML::WriteDiagram(const 
css::uno::Reference<css::drawing::XShape>& rX
         drawingFileName = "diagrams/drawing" + OUString::number(nDiagramId) + 
".xml";
         OUString drawingRelId = mpFB->addRelation(
             mpFS->getOutputStream(), 
oox::getRelationship(Relationship::DIAGRAMDRAWING),
-            OUString(sRelationCompPrefix + drawingFileName));
+            OUStringConcatenation(sRelationCompPrefix + drawingFileName));
 
         // the data dom contains a reference to the drawing relation. We need 
to update it with the new generated
         // relation value before writing the dom to a file
@@ -5284,7 +5284,7 @@ void DrawingML::writeDiagramRels(const 
uno::Sequence<uno::Sequence<uno::Any>>& x
         PropertySet aProps(xOutStream);
         aProps.setAnyProperty(PROP_RelId, uno::makeAny(sRelId.toInt32()));
 
-        mpFB->addRelation(xOutStream, sType, OUString("../" + sFragment));
+        mpFB->addRelation(xOutStream, sType, OUStringConcatenation("../" + 
sFragment));
 
         OUString sDir = OUString::createFromAscii(GetComponentDir());
         uno::Reference<io::XOutputStream> xBinOutStream
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index bc120abe1627..dca1775112bb 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -2146,7 +2146,7 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const 
Reference< XShape >& xShape )
 
     OUString const sRelId = mpFB->addRelation(
         mpFS->getOutputStream(), sRelationType,
-        OUString(OUString::createFromAscii(GetRelationCompPrefix()) + 
sFileName));
+        
OUStringConcatenation(OUString::createFromAscii(GetRelationCompPrefix()) + 
sFileName));
 
     mpFS->startElementNS(mnXmlNamespace, XML_graphicFrame);
 
diff --git a/oox/source/ole/vbaexport.cxx b/oox/source/ole/vbaexport.cxx
index 372f821aa0b7..2c24593c981e 100644
--- a/oox/source/ole/vbaexport.cxx
+++ b/oox/source/ole/vbaexport.cxx
@@ -779,7 +779,7 @@ void exportModuleStream(SvStream& rStrm, const OUString& 
rSourceCode, const OUSt
 {
     SvMemoryStream aModuleStream(4096, 4096);
 
-    exportString(aModuleStream, OUString("Attribute VB_Name = \"" + 
aElementName + "\"\r\n"));
+    exportString(aModuleStream, OUStringConcatenation("Attribute VB_Name = \"" 
+ aElementName + "\"\r\n"));
     if (rInfo.ModuleType == 4)
     {
         if (isWorkbook(rInfo.ModuleObject))
@@ -847,16 +847,16 @@ void exportPROJECTStream(SvStream& rStrm, const 
css::uno::Reference<css::contain
         css::script::ModuleInfo aModuleInfo = 
xModuleInfo->getModuleInfo(rModuleName);
         if(aModuleInfo.ModuleType == 1)
         {
-            exportString(rStrm, OUString("Module=" + rModuleName + "\r\n"));
+            exportString(rStrm, OUStringConcatenation("Module=" + rModuleName 
+ "\r\n"));
         }
         else if(aModuleInfo.ModuleType == 4)
         {
-            exportString(rStrm, OUString("Document=" + rModuleName + 
"/&H00000000\r\n"));
+            exportString(rStrm, OUStringConcatenation("Document=" + 
rModuleName + "/&H00000000\r\n"));
         }
     }
 
     // section 2.3.1.11 ProjectName
-    exportString(rStrm, OUString("Name=\"" + projectName + "\"\r\n"));
+    exportString(rStrm, OUStringConcatenation("Name=\"" + projectName + 
"\"\r\n"));
 
     // section 2.3.1.12 ProjectHelpId
     exportString(rStrm, u"HelpContextID=\"0\"\r\n");
@@ -917,11 +917,11 @@ void exportPROJECTStream(SvStream& rStrm, const 
css::uno::Reference<css::contain
         css::script::ModuleInfo aModuleInfo = 
xModuleInfo->getModuleInfo(rModuleName);
         if(aModuleInfo.ModuleType == 1)
         {
-            exportString(rStrm,  OUString(rModuleName + "=25, 25, 1439, 639, 
\r\n"));
+            exportString(rStrm,  OUStringConcatenation(rModuleName + "=25, 25, 
1439, 639, \r\n"));
         }
         else
         {
-            exportString(rStrm, OUString(rModuleName + "=0, 0, 0, 0, C\r\n"));
+            exportString(rStrm, OUStringConcatenation(rModuleName + "=0, 0, 0, 
0, C\r\n"));
         }
     }
 }
diff --git a/sal/qa/rtl/strings/test_oustring_compare.cxx 
b/sal/qa/rtl/strings/test_oustring_compare.cxx
index 6316f09b1d58..e55d4d3d93b1 100644
--- a/sal/qa/rtl/strings/test_oustring_compare.cxx
+++ b/sal/qa/rtl/strings/test_oustring_compare.cxx
@@ -88,8 +88,8 @@ void test::oustring::Compare::compareTo()
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), s2.compareTo(s2));
     CPPUNIT_ASSERT(s1.compareTo(s2) < 0);
     CPPUNIT_ASSERT(s2.compareTo(s1) > 0);
-    CPPUNIT_ASSERT(s1.compareTo(OUString(s2 + "y")) < 0);
-    CPPUNIT_ASSERT(s2.compareTo(OUString(s1 + "x")) > 0);
+    CPPUNIT_ASSERT(s1.compareTo(OUStringConcatenation(s2 + "y")) < 0);
+    CPPUNIT_ASSERT(s2.compareTo(OUStringConcatenation(s1 + "x")) > 0);
     CPPUNIT_ASSERT(OUString(s1 + "x").compareTo(s2) < 0);
     CPPUNIT_ASSERT(OUString(s2 + "y").compareTo(s1) > 0);
 }
diff --git a/sal/qa/rtl/textenc/rtl_textcvt.cxx 
b/sal/qa/rtl/textenc/rtl_textcvt.cxx
index e4cdbc84c248..8fa8b4e8dc96 100644
--- a/sal/qa/rtl/textenc/rtl_textcvt.cxx
+++ b/sal/qa/rtl/textenc/rtl_textcvt.cxx
@@ -56,7 +56,7 @@ void testSingleByteCharSet(SingleByteCharSet const & rSet) {
     {
         rtl_TextToUnicodeConverter aConverter
             = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + OUString::number(rSet.m_nEncoding) + ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + OUString::number(rSet.m_nEncoding) + ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         rtl_TextToUnicodeContext aContext
@@ -81,11 +81,11 @@ void testSingleByteCharSet(SingleByteCharSet const & rSet) {
         int j = 0;
         for (int i = 0; i < 256; ++i) {
             if (rSet.m_aMap[i] != 0xFFFF && aUnicode[j] != rSet.m_aMap[i]) {
-                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("rSet.m_aMap[" + 
OUString::number(i) + "] == " +
+                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("rSet.m_aMap["
 + OUString::number(i) + "] == " +
                                                                   
OUString::number(rSet.m_aMap[i], 16)),
                                                          
RTL_TEXTENCODING_UTF8).getStr(),
                                        u'\xFFFF', rSet.m_aMap[i]);
-                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + 
OUString::number(j) + "] == " +
+                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode["
 + OUString::number(j) + "] == " +
                                                                   
OUString::number(aUnicode[j], 16) +
                                                                   ", 
rSet.m_aMap[" + OUString::number(i) + "] == " +
                                                                   
OUString::number(rSet.m_aMap[i], 16)),
@@ -102,7 +102,7 @@ void testSingleByteCharSet(SingleByteCharSet const & rSet) {
     {
         rtl_UnicodeToTextConverter aConverter
             = rtl_createUnicodeToTextConverter(rSet.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) 
+ ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) 
+ ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         rtl_UnicodeToTextContext aContext
@@ -128,11 +128,11 @@ void testSingleByteCharSet(SingleByteCharSet const & 
rSet) {
             if (rSet.m_aMap[i] != 0xFFFF
                 && aText[j] != static_cast< char >(i))
             {
-                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("rSet.m_aMap[" + 
OUString::number(i) + "] == " +
+                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("rSet.m_aMap["
 + OUString::number(i) + "] == " +
                                                                   
OUString::number(rSet.m_aMap[i], 16)),
                                                          
RTL_TEXTENCODING_UTF8).getStr(),
                                        u'\xFFFF', rSet.m_aMap[i]);
-                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aText[" + 
OUString::number(j) + "] == " +
+                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aText[" + 
OUString::number(j) + "] == " +
                                                                   
OUString::number(i, 16)),
                                                          
RTL_TEXTENCODING_UTF8).getStr(),
                                        static_cast< char >(i), aText[j]);
@@ -146,7 +146,7 @@ void testSingleByteCharSet(SingleByteCharSet const & rSet) {
             aText[0] = static_cast< char >(i);
             rtl_TextToUnicodeConverter aConverter
                 = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
-            
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) 
+ ") failed"),
+            
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) 
+ ") failed"),
                                                      
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
             rtl_TextToUnicodeContext aContext
@@ -194,7 +194,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
         sal_Unicode aUnicode[TEST_STRING_SIZE];
         rtl_TextToUnicodeConverter aConverter
             = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         rtl_TextToUnicodeContext aContext
@@ -222,7 +222,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
         rtl_destroyTextToUnicodeConverter(aConverter);
 
         for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
-            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + 
OUString::number(i) + "] == " +
+            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode["
 + OUString::number(i) + "] == " +
                                                               
OUString::number(aUnicode[i], 16) +
                                                               ", 
rTest.m_aUnicode[" + OUString::number(i) + "] == " +
                                                               
OUString::number(rTest.m_aUnicode[i], 16)),
@@ -234,7 +234,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
         sal_Unicode aUnicode[TEST_STRING_SIZE];
         rtl_TextToUnicodeConverter aConverter
             = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         rtl_TextToUnicodeContext aContext
@@ -272,7 +272,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
             CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nInput);
 
             for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
-                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + 
OUString::number(i) + "] == " +
+                
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode["
 + OUString::number(i) + "] == " +
                                                                   
OUString::number(aUnicode[i], 16) +
                                                                   ", 
rTest.m_aUnicode[" + OUString::number(i) + "] == " +
                                                                   
OUString::number(rTest.m_aUnicode[i], 16)),
@@ -288,7 +288,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
         int nSize = 0;
         rtl_TextToUnicodeConverter aConverter
             = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         for (sal_Size i = 0;;) {
@@ -357,7 +357,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
     done:
         rtl_destroyTextToUnicodeConverter(aConverter);
         for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
-            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + 
OUString::number(i) + "] == " +
+            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode["
 + OUString::number(i) + "] == " +
                                                               
OUString::number(aUnicode[i], 16) +
                                                               ", 
rTest.m_aUnicode[" + OUString::number(i) + "] == " +
                                                               
OUString::number(rTest.m_aUnicode[i], 16)),
@@ -369,7 +369,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
         char aText[TEST_STRING_SIZE];
         rtl_UnicodeToTextConverter aConverter
             = rtl_createUnicodeToTextConverter(rTest.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         rtl_UnicodeToTextContext aContext
@@ -397,7 +397,7 @@ void doComplexCharSetTest(ComplexCharSetTest const & rTest) 
{
         rtl_destroyUnicodeToTextContext(aConverter, aContext);
         rtl_destroyUnicodeToTextConverter(aConverter);
         for (sal_Size i = 0; i < rTest.m_nTextSize; ++i) {
-            CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aText[" + 
OUString::number(i) + "] == " +
+            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aText[" + 
OUString::number(i) + "] == " +
                                                               
OUString::number(aText[i], 16) +
                                                               ", 
rTest.m_pText[" + OUString::number(i) + "] == " +
                                                               
OUString::number(rTest.m_pText[i], 16)),
@@ -412,7 +412,7 @@ void doComplexCharSetCutTest(ComplexCharSetTest const & 
rTest) {
         sal_Unicode aUnicode[TEST_STRING_SIZE];
         rtl_TextToUnicodeConverter aConverter
             = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
-        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
+        
CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUStringConcatenation("rtl_createTextToUnicodeConverter("
 + 
OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding))
 + ") failed"),
                                                  
RTL_TEXTENCODING_UTF8).getStr(),
                                aConverter != nullptr);
         sal_Size nSize;
@@ -436,7 +436,7 @@ void doComplexCharSetCutTest(ComplexCharSetTest const & 
rTest) {
 
         rtl_destroyTextToUnicodeConverter(aConverter);
         for (sal_Size i = 0; i < nSize; ++i) {
-            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + 
OUString::number(i) + "] == " +
+            
CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUStringConcatenation("aUnicode["
 + OUString::number(i) + "] == " +
                                                               
OUString::number(aUnicode[i], 16) +
                                                               ", 
rTest.m_aUnicode[" + OUString::number(i) + "] == " +
                                                               
OUString::number(rTest.m_aUnicode[i], 16)),
diff --git a/sc/qa/extras/macros-test.cxx b/sc/qa/extras/macros-test.cxx
index 50eba8cbc7b6..128b4b57df42 100644
--- a/sc/qa/extras/macros-test.cxx
+++ b/sc/qa/extras/macros-test.cxx
@@ -358,7 +358,7 @@ void ScMacrosTest::testVba()
     for (const auto& rTestInfo : testInfo)
     {
         OUString aFileName;
-        createFileURL(OUString(rTestInfo.sFileBaseName + "xls"), aFileName);
+        createFileURL(OUStringConcatenation(rTestInfo.sFileBaseName + "xls"), 
aFileName);
         uno::Reference< css::lang::XComponent > xComponent = 
loadFromDesktop(aFileName, "com.sun.star.sheet.SpreadsheetDocument");
 
         // process all events such as OnLoad events etc.
diff --git a/sc/source/filter/excel/xecontent.cxx 
b/sc/source/filter/excel/xecontent.cxx
index a4a2d87819e5..4baa6c00e9ad 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -456,7 +456,7 @@ XclExpHyperlink::XclExpHyperlink( const XclExpRoot& rRoot, 
const SvxURLField& rU
         mnFlags |= EXC_HLINK_MARK;
 
         OUString location = XclXmlUtils::ToOUString(*mxTextMark);
-        if (!location.isEmpty() && msTarget.endsWith(OUString("#" + location)))
+        if (!location.isEmpty() && msTarget.endsWith(OUStringConcatenation("#" 
+ location)))
             msTarget = msTarget.copy(0, msTarget.getLength() - 
location.getLength() - 1);
     }
 
diff --git a/sc/source/filter/excel/xelink.cxx 
b/sc/source/filter/excel/xelink.cxx
index 4e30a29e9867..90a46120974e 100644
--- a/sc/source/filter/excel/xelink.cxx
+++ b/sc/source/filter/excel/xelink.cxx
@@ -1466,7 +1466,7 @@ XclExpExternSheet::XclExpExternSheet( const XclExpRoot& 
rRoot, std::u16string_vi
     XclExpExternSheetBase( rRoot, EXC_ID_EXTERNSHEET )
 {
     // reference to own sheet: \03<sheetname>
-    Init(OUString(OUStringChar(EXC_EXTSH_TABNAME) + rTabName));
+    Init(OUStringConcatenation(OUStringChar(EXC_EXTSH_TABNAME) + rTabName));
 }
 
 void XclExpExternSheet::Save( XclExpStream& rStrm )
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 9bae1492fbca..36b3886d852f 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -445,7 +445,7 @@ void SdImportTest::testDocumentLayout()
         if( aFilesToCompare[i].nExportType >= 0 )
             xDocShRef = saveAndReload( xDocShRef.get(), 
aFilesToCompare[i].nExportType );
         compareWithShapesDump( xDocShRef,
-                OUString(m_directories.getPathFromSrc( u"/sd/qa/unit/data/" ) 
+ aFilesToCompare[i].sDump),
+                OUStringConcatenation(m_directories.getPathFromSrc( 
u"/sd/qa/unit/data/" ) + aFilesToCompare[i].sDump),
                 i == nUpdateMe );
     }
 }
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
index 0b2af6470786..79f22b4eb864 100644
--- a/sd/source/core/drawdoc3.cxx
+++ b/sd/source/core/drawdoc3.cxx
@@ -915,7 +915,7 @@ bool SdDrawDocument::InsertBookmarkAsPage(
                     if(pPg->GetObj(i)->GetStyleSheet())
                     {
                         OUString aStyleName = 
pPg->GetObj(i)->GetStyleSheet()->GetName();
-                        SfxStyleSheet *pSheet = 
lcl_findStyle(aNewGraphicStyles, OUString(aStyleName + aRenameStr));
+                        SfxStyleSheet *pSheet = 
lcl_findStyle(aNewGraphicStyles, OUStringConcatenation(aStyleName + 
aRenameStr));
                         if(pSheet != nullptr)
                             pPg->GetObj(i)->SetStyleSheet(pSheet, true);
                     }
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx 
b/sd/source/filter/eppt/pptx-epptooxml.cxx
index 8917dd23b44e..9070b6135259 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -1263,7 +1263,7 @@ void PowerPointExport::ImplWriteSlide(sal_uInt32 
nPageNum, sal_uInt32 nMasterNum
     // add explicit relation of presentation to this slide
     OUString sRelId = addRelation(mPresentationFS->getOutputStream(),
                                   oox::getRelationship(Relationship::SLIDE),
-                                  OUString("slides/slide" + 
OUString::number(nPageNum + 1) +".xml"));
+                                  OUStringConcatenation("slides/slide" + 
OUString::number(nPageNum + 1) +".xml"));
 
     mPresentationFS->singleElementNS(XML_p, XML_sldId,
                                      XML_id, OString::number(GetNewSlideId()),
@@ -1313,7 +1313,7 @@ void PowerPointExport::ImplWriteSlide(sal_uInt32 
nPageNum, sal_uInt32 nMasterNum
     // add implicit relation to slide layout
     addRelation(pFS->getOutputStream(),
                 oox::getRelationship(Relationship::SLIDELAYOUT),
-                OUString("../slideLayouts/slideLayout" +
+                OUStringConcatenation("../slideLayouts/slideLayout" +
                     
OUString::number(GetLayoutFileId(GetPPTXLayoutId(GetLayoutOffset(mXPagePropSet)),
 nMasterNum)) +
                     ".xml"));
 
@@ -1321,7 +1321,7 @@ void PowerPointExport::ImplWriteSlide(sal_uInt32 
nPageNum, sal_uInt32 nMasterNum
         // add implicit relation to slide comments
         addRelation(pFS->getOutputStream(),
                     oox::getRelationship(Relationship::COMMENTS),
-                    OUString("../comments/comment" + OUString::number(nPageNum 
+ 1) + ".xml"));
+                    OUStringConcatenation("../comments/comment" + 
OUString::number(nPageNum + 1) + ".xml"));
 
     SAL_INFO("sd.eppt", "----------------");
 }
@@ -1352,13 +1352,13 @@ void PowerPointExport::ImplWriteNotes(sal_uInt32 
nPageNum)
     // add implicit relation to slide
     addRelation(pFS->getOutputStream(),
                 oox::getRelationship(Relationship::SLIDE),
-                OUString("../slides/slide" + OUString::number(nPageNum + 1) + 
".xml"));
+                OUStringConcatenation("../slides/slide" + 
OUString::number(nPageNum + 1) + ".xml"));
 
     // add slide implicit relation to notes
     if (nPageNum < mpSlidesFSArray.size())
         addRelation(mpSlidesFSArray[ nPageNum ]->getOutputStream(),
                     oox::getRelationship(Relationship::NOTESSLIDE),
-                    OUString("../notesSlides/notesSlide" + 
OUString::number(nPageNum + 1) + ".xml"));
+                    OUStringConcatenation("../notesSlides/notesSlide" + 
OUString::number(nPageNum + 1) + ".xml"));
 
     // add implicit relation to notes master
     addRelation(pFS->getOutputStream(),
@@ -1373,7 +1373,7 @@ void PowerPointExport::AddLayoutIdAndRelation(const 
FSHelperPtr& pFS, sal_Int32
     // add implicit relation of slide master to slide layout
     OUString sRelId = addRelation(pFS->getOutputStream(),
                                   
oox::getRelationship(Relationship::SLIDELAYOUT),
-                                  OUString("../slideLayouts/slideLayout" + 
OUString::number(nLayoutFileId) + ".xml"));
+                                  
OUStringConcatenation("../slideLayouts/slideLayout" + 
OUString::number(nLayoutFileId) + ".xml"));
 
     pFS->singleElementNS(XML_p, XML_sldLayoutId,
                          XML_id, OString::number(GetNewSlideMasterId()),
@@ -1390,7 +1390,7 @@ void PowerPointExport::ImplWriteSlideMaster(sal_uInt32 
nPageNum, Reference< XPro
 
     OUString sRelId = addRelation(mPresentationFS->getOutputStream(),
                                   
oox::getRelationship(Relationship::SLIDEMASTER),
-                                  OUString("slideMasters/slideMaster" + 
OUString::number(nPageNum + 1) + ".xml"));
+                                  
OUStringConcatenation("slideMasters/slideMaster" + OUString::number(nPageNum + 
1) + ".xml"));
 
     mPresentationFS->singleElementNS(XML_p, XML_sldMasterId,
                                      XML_id, 
OString::number(GetNewSlideMasterId()),
@@ -1410,7 +1410,7 @@ void PowerPointExport::ImplWriteSlideMaster(sal_uInt32 
nPageNum, Reference< XPro
     // add implicit relation to the presentation theme
     addRelation(pFS->getOutputStream(),
                 oox::getRelationship(Relationship::THEME),
-                OUString("../theme/theme" + OUString::number(nPageNum + 1) + 
".xml"));
+                OUStringConcatenation("../theme/theme" + 
OUString::number(nPageNum + 1) + ".xml"));
 
     pFS->startElementNS(XML_p, XML_sldMaster, PNMSS);
 
@@ -1507,7 +1507,7 @@ void PowerPointExport::ImplWritePPTXLayout(sal_Int32 
nOffset, sal_uInt32 nMaster
     // add implicit relation of slide layout to slide master
     addRelation(pFS->getOutputStream(),
                 oox::getRelationship(Relationship::SLIDEMASTER),
-                OUString("../slideMasters/slideMaster" + 
OUString::number(nMasterNum + 1) + ".xml"));
+                OUStringConcatenation("../slideMasters/slideMaster" + 
OUString::number(nMasterNum + 1) + ".xml"));
 
     pFS->startElementNS(XML_p, XML_sldLayout,
                         PNMSS,
@@ -2178,7 +2178,7 @@ void PowerPointExport::WriteNotesMaster()
     // add implicit relation to the presentation theme
     addRelation(pFS->getOutputStream(),
                 oox::getRelationship(Relationship::THEME),
-                OUString("../theme/theme" + OUString::number(mnMasterPages + 
1) + ".xml"));
+                OUStringConcatenation("../theme/theme" + 
OUString::number(mnMasterPages + 1) + ".xml"));
 
     pFS->startElementNS(XML_p, XML_notesMaster, PNMSS);
 
diff --git a/sdext/source/presenter/PresenterHelpView.cxx 
b/sdext/source/presenter/PresenterHelpView.cxx
index 47bf1a371415..74adeedd1a9e 100644
--- a/sdext/source/presenter/PresenterHelpView.cxx
+++ b/sdext/source/presenter/PresenterHelpView.cxx
@@ -706,7 +706,7 @@ void LineDescriptorList::FormatText (
         }
         else
         {
-            aLineDescriptor.AddPart(OUString(", "+*iPart), rxFont);
+            aLineDescriptor.AddPart(OUStringConcatenation(", "+*iPart), 
rxFont);
         }
         ++iPart;
     }
diff --git a/sfx2/source/appl/newhelp.cxx b/sfx2/source/appl/newhelp.cxx
index 3749b3cf8a12..1325dff8ce71 100644
--- a/sfx2/source/appl/newhelp.cxx
+++ b/sfx2/source/appl/newhelp.cxx
@@ -2322,7 +2322,7 @@ IMPL_LINK_NOARG(SfxHelpWindow_Impl, OpenHdl, 
LinkParamNone*, void)
         else
             aId = aEntry;
 
-        sHelpURL = SfxHelpWindow_Impl::buildHelpURL(xIndexWin->GetFactory(), 
OUString("/" + aId), aAnchor);
+        sHelpURL = SfxHelpWindow_Impl::buildHelpURL(xIndexWin->GetFactory(), 
OUStringConcatenation("/" + aId), aAnchor);
     }
 
     loadHelpContent(sHelpURL);
diff --git a/sfx2/source/view/classificationhelper.cxx 
b/sfx2/source/view/classificationhelper.cxx
index 629ceeaef560..457872bf9da2 100644
--- a/sfx2/source/view/classificationhelper.cxx
+++ b/sfx2/source/view/classificationhelper.cxx
@@ -581,7 +581,7 @@ SfxClassificationHelper::SfxClassificationHelper(const 
uno::Reference<document::
                 continue;
 
             //TODO: Support abbreviated names(?)
-            if (rProperty.Name == (aPrefix + PROP_BACNAME()))
+            if (rProperty.Name == OUStringConcatenation(aPrefix + 
PROP_BACNAME()))
                 m_pImpl->m_aCategory[eType].m_aName = aValue;
             else
                 m_pImpl->m_aCategory[eType].m_aLabels[rProperty.Name] = aValue;
diff --git a/shell/source/backends/desktopbe/desktopbackend.cxx 
b/shell/source/backends/desktopbe/desktopbackend.cxx
index cd48f7aaf9bb..8d6a5615e6ba 100644
--- a/shell/source/backends/desktopbe/desktopbackend.cxx
+++ b/shell/source/backends/desktopbe/desktopbackend.cxx
@@ -201,7 +201,7 @@ OUString xdg_user_dir_lookup (const char *type, bool 
bAllowHomeDir)
     {
         aDocumentsDirURL = aUserDirBuf.makeStringAndClear();
         if ( bAllowHomeDir ||
-             (aDocumentsDirURL != aHomeDirURL && aDocumentsDirURL != 
aHomeDirURL + "/") )
+             (aDocumentsDirURL != aHomeDirURL && aDocumentsDirURL != 
OUStringConcatenation(aHomeDirURL + "/")) )
         {
             osl::Directory aDocumentsDir( aDocumentsDirURL );
             if( osl::FileBase::E_None == aDocumentsDir.open() )
diff --git a/stoc/source/implementationregistration/implreg.cxx 
b/stoc/source/implementationregistration/implreg.cxx
index 24471b8ad4e5..90c9d462db71 100644
--- a/stoc/source/implementationregistration/implreg.cxx
+++ b/stoc/source/implementationregistration/implreg.cxx
@@ -611,11 +611,11 @@ void deleteAllImplementations(   const Reference < 
XSimpleRegistry >& xReg,
 
                         for (const Reference < XRegistryKey > & rSubKey2 : 
subKeys2)
                         {
-                            if (rSubKey2->getKeyName() != 
(xImplKey->getKeyName() + slash_UNO_slash_SERVICES ) &&
-                                rSubKey2->getKeyName() != 
(xImplKey->getKeyName() + slash_UNO_slash_REGISTRY_LINKS ) &&
-                                rSubKey2->getKeyName() != 
(xImplKey->getKeyName() + slash_UNO_slash_ACTIVATOR ) &&
-                                rSubKey2->getKeyName() != 
(xImplKey->getKeyName() + slash_UNO_slash_SINGLETONS ) &&
-                                rSubKey2->getKeyName() != 
(xImplKey->getKeyName() + slash_UNO_slash_LOCATION) )
+                            if (rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_SERVICES ) &&
+                                rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_REGISTRY_LINKS ) 
&&
+                                rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_ACTIVATOR ) &&
+                                rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_SINGLETONS ) &&
+                                rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_LOCATION) )
                             {
                                 prepareUserKeys(xReg, xKey, rSubKey2, 
implName, false);
                             }
@@ -947,9 +947,9 @@ void prepareRegistry(
 
                 for (const Reference < XRegistryKey >& rSubKey2 : subKeys2)
                 {
-                    if (rSubKey2->getKeyName() != (xImplKey->getKeyName() + 
slash_UNO_slash_SERVICES) &&
-                        rSubKey2->getKeyName() != (xImplKey->getKeyName() + 
slash_UNO_slash_REGISTRY_LINKS ) &&
-                        rSubKey2->getKeyName() != (xImplKey->getKeyName() + 
slash_UNO_slash_SINGLETONS ))
+                    if (rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_SERVICES) &&
+                        rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_REGISTRY_LINKS ) 
&&
+                        rSubKey2->getKeyName() != 
OUStringConcatenation(xImplKey->getKeyName() + slash_UNO_slash_SINGLETONS ))
                     {
                         prepareUserKeys(xDest, xKey, rSubKey2, implName, true);
                     }
diff --git a/svl/source/misc/lockfilecommon.cxx 
b/svl/source/misc/lockfilecommon.cxx
index 7cff508f3290..844b446397c7 100644
--- a/svl/source/misc/lockfilecommon.cxx
+++ b/svl/source/misc/lockfilecommon.cxx
@@ -73,7 +73,7 @@ OUString LockFileCommon::GenerateOwnLockFileURL(
     const OUString& aOrigURL, std::u16string_view aPrefix)
 {
     INetURLObject aURL = ResolveLinks(INetURLObject(aOrigURL));
-    aURL.setName(OUString(aPrefix + aURL.GetLastName() + "%23" /*'#'*/));
+    aURL.setName(OUStringConcatenation(aPrefix + aURL.GetLastName() + "%23" 
/*'#'*/));
     return aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE);
 }
 
diff --git a/svl/source/misc/msodocumentlockfile.cxx 
b/svl/source/misc/msodocumentlockfile.cxx
index fa104dcfbbe2..e8b24e8cbe33 100644
--- a/svl/source/misc/msodocumentlockfile.cxx
+++ b/svl/source/misc/msodocumentlockfile.cxx
@@ -56,7 +56,7 @@ OUString GenerateMSOLockFileURL(const OUString& aOrigURL)
         else if (nFileNameLength == 7)
             sFileName = sFileName.copy(1);
     }
-    aURL.setName(OUString("~$" + sFileName));
+    aURL.setName(OUStringConcatenation("~$" + sFileName));
     return aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE);
 }
 }
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 53eb8181c2d6..cac944b321c4 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -706,7 +706,7 @@ OUString SvNumberformat::ImpObtainCalendarAndNumerals( 
OUStringBuffer& rString,
     if ( nNumeralID >= 0x02 && nNumeralID <= 0x13 )
         nNatNum = 1;
     if ( nNatNum )
-        rString.insert( nPos, "[NatNum"+OUString::number(nNatNum)+"]");
+        rString.insert( nPos, 
OUStringConcatenation("[NatNum"+OUString::number(nNatNum)+"]"));
     return sCalendar;
 }
 
@@ -5638,7 +5638,7 @@ OUString SvNumberformat::impTransliterateImpl(const 
OUString& rStr,
     sal_Int32 nField = -1;
     do
     {
-        nField = rNum.GetParams().indexOf(OUString(rKeywords[nDateKey] + "="), 
++nField);
+        nField = 
rNum.GetParams().indexOf(OUStringConcatenation(rKeywords[nDateKey] + "="), 
++nField);
     }
     while (nField != -1 && nField != 0 &&
             (rNum.GetParams()[nField - 1] != ',' &&
diff --git a/svtools/source/dialogs/PlaceEditDialog.cxx 
b/svtools/source/dialogs/PlaceEditDialog.cxx
index f006f82c84a7..359d0d0f5327 100644
--- a/svtools/source/dialogs/PlaceEditDialog.cxx
+++ b/svtools/source/dialogs/PlaceEditDialog.cxx
@@ -194,7 +194,7 @@ void PlaceEditDialog::InitDetails( )
     auto nSize = std::min(aTypesUrlsList.getLength(), 
aTypesNamesList.getLength());
     for ( sal_Int32 i = 0; i < nSize; ++i )
     {
-        OUString sUrl = aTypesUrlsList[i].replaceFirst("<host", OUString("<" + 
SvtResId(STR_SVT_HOST))).replaceFirst("port>",  OUString(SvtResId(STR_SVT_PORT) 
+ ">"));
+        OUString sUrl = aTypesUrlsList[i].replaceFirst("<host", 
OUStringConcatenation("<" + SvtResId(STR_SVT_HOST))).replaceFirst("port>",  
OUStringConcatenation(SvtResId(STR_SVT_PORT) + ">"));
 
         if ((sUrl == GDRIVE_BASE_URL && bSkipGDrive) ||
             (sUrl.startsWith( ALFRESCO_CLOUD_BASE_URL) && bSkipAlfresco) ||
diff --git a/svtools/source/dialogs/ServerDetailsControls.cxx 
b/svtools/source/dialogs/ServerDetailsControls.cxx
index 08a81cdc36a6..b4afe9bb2d5c 100644
--- a/svtools/source/dialogs/ServerDetailsControls.cxx
+++ b/svtools/source/dialogs/ServerDetailsControls.cxx
@@ -145,7 +145,7 @@ bool HostDetailsContainer::setUrl( const INetURLObject& 
rUrl )
 
 bool HostDetailsContainer::verifyScheme( const OUString& sScheme )
 {
-    return sScheme == ( m_sScheme + "://" );
+    return sScheme == OUStringConcatenation( m_sScheme + "://" );
 }
 
 DavDetailsContainer::DavDetailsContainer(PlaceEditDialog* pBuilder)
diff --git a/svtools/source/svhtml/HtmlWriter.cxx 
b/svtools/source/svhtml/HtmlWriter.cxx
index 8cd7dc8705b4..f7c35a644706 100644
--- a/svtools/source/svhtml/HtmlWriter.cxx
+++ b/svtools/source/svhtml/HtmlWriter.cxx
@@ -52,7 +52,7 @@ void HtmlWriter::start(const OString& aElement)
     }
 
     mrStream.WriteChar('<');
-    mrStream.WriteOString(OString(maNamespace + aElement));
+    mrStream.WriteOString(OStringConcatenation(maNamespace + aElement));
     mbElementOpen = true;
 }
 
@@ -107,7 +107,7 @@ void HtmlWriter::end()
             }
         }
         mrStream.WriteCharPtr("</");
-        mrStream.WriteOString(OString(maNamespace + maElementStack.back()));
+        mrStream.WriteOString(OStringConcatenation(maNamespace + 
maElementStack.back()));
         mrStream.WriteCharPtr(">");
         if (mbPrettyPrint)
             mrStream.WriteCharPtr("\n");
diff --git a/svx/source/gallery2/gallerybinaryengineentry.cxx 
b/svx/source/gallery2/gallerybinaryengineentry.cxx
index 86989271231f..f892788ae208 100644
--- a/svx/source/gallery2/gallerybinaryengineentry.cxx
+++ b/svx/source/gallery2/gallerybinaryengineentry.cxx
@@ -60,7 +60,7 @@ void GalleryBinaryEngineEntry::CreateUniqueURL(const 
INetURLObject& rBaseURL, IN
     { // create new URLs
         nIdx++;
         aURL = aBaseNoCase;
-        aURL.setName(OUString(aURL.getName() + OUString::number(nIdx)));
+        aURL.setName(OUStringConcatenation(aURL.getName() + 
OUString::number(nIdx)));
     }
 }
 
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx 
b/sw/qa/extras/globalfilter/globalfilter.cxx
index f51a1132b60a..01f36765a18a 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -1054,7 +1054,7 @@ void Test::testNestedFieldmark()
         }
 
         mxComponent = loadFromDesktop(m_directories.getURLFromSrc(
-                OUString("/sw/qa/extras/globalfilter/data/" + 
rFilterName.second)),
+                OUStringConcatenation("/sw/qa/extras/globalfilter/data/" + 
rFilterName.second)),
             "com.sun.star.text.TextDocument");
 
         verifyNestedFieldmark(rFilterName.first + ", load", mxComponent);
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx 
b/sw/qa/extras/uiwriter/uiwriter.cxx
index 99b47f73ac52..4a50e0423608 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -3954,7 +3954,7 @@ void SwUiWriterTest::testEmbeddedDataSource()
 
     // Load: should have a component and a data source, too.
     // Path with "#" must not cause issues
-    createSwDoc(OUString(DATA_DIRECTORY + OUString::Concat(u"hash%23path/")), 
"embedded-data-source.odt");
+    createSwDoc(OUStringConcatenation(DATA_DIRECTORY + 
OUString::Concat(u"hash%23path/")), "embedded-data-source.odt");
     CPPUNIT_ASSERT(xDatabaseContext->hasByName("calc-data-source"));
 
     // Data source has a table named Sheet1.
diff --git a/sw/source/core/crsr/crossrefbookmark.cxx 
b/sw/source/core/crsr/crossrefbookmark.cxx
index 55b77bf4ccb3..76c1fbad03df 100644
--- a/sw/source/core/crsr/crossrefbookmark.cxx
+++ b/sw/source/core/crsr/crossrefbookmark.cxx
@@ -70,7 +70,7 @@ namespace sw::mark
     CrossRefHeadingBookmark::CrossRefHeadingBookmark(const SwPaM& rPaM,
         const vcl::KeyCode& rCode,
         const OUString& rName)
-        : CrossRefBookmark(rPaM, rCode, rName, 
OUString(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()+"_Toc"))
+        : CrossRefBookmark(rPaM, rCode, rName, 
OUStringConcatenation(IDocumentMarkAccess::GetCrossRefHeadingBookmarkNamePrefix()+"_Toc"))
     { }
 
     bool CrossRefHeadingBookmark::IsLegalName(const OUString& rName)
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index dbed7a76db0f..f62e3ab67f34 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -1116,7 +1116,7 @@ void SwEditShell::SetClassification(const OUString& 
rName, SfxClassificationPoli
 
             if (bHeaderIsNeeded)
             {
-                if (!lcl_hasField(xHeaderText, DocInfoServiceName, 
OUString(SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY() + 
SfxClassificationHelper::PROP_DOCHEADER())))
+                if (!lcl_hasField(xHeaderText, DocInfoServiceName, 
OUStringConcatenation(SfxClassificationHelper::PROP_PREFIX_INTELLECTUALPROPERTY()
 + SfxClassificationHelper::PROP_DOCHEADER())))
                 {
                     // Append a field to the end of the header text.
                     uno::Reference<beans::XPropertySet> 
xField(xMultiServiceFactory->createInstance(DocInfoServiceName), 
uno::UNO_QUERY);
diff --git a/sw/source/filter/ascii/ascatr.cxx 
b/sw/source/filter/ascii/ascatr.cxx
index 93cc659b9c9b..6edccce4298c 100644
--- a/sw/source/filter/ascii/ascatr.cxx
+++ b/sw/source/filter/ascii/ascatr.cxx
@@ -280,7 +280,7 @@ static Writer& OutASC_SwTextNode( Writer& rWrt, 
SwContentNode& rNode )
         }
 
         if (!level.isEmpty() || !numString.isEmpty())
-            rWrt.Strm().WriteUnicodeOrByteText(OUString(level + numString + " 
"));
+            rWrt.Strm().WriteUnicodeOrByteText(OUStringConcatenation(level + 
numString + " "));
     }
 
     OUString aStr( rNd.GetText() );
diff --git a/sw/source/filter/html/css1atr.cxx 
b/sw/source/filter/html/css1atr.cxx
index 52ae7c48a29e..ff3817eeeb00 100644
--- a/sw/source/filter/html/css1atr.cxx
+++ b/sw/source/filter/html/css1atr.cxx
@@ -321,7 +321,7 @@ void SwHTMLWriter::OutCSS1_Property( const char *pProp,
             }
             else
             {
-                HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false );
+                HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), false );
                 return;
             }
             break;
@@ -571,7 +571,7 @@ void SwHTMLWriter::OutStyleSheet( const SwPageDesc& 
rPageDesc )
         DecIndentLevel();
 
         OutNewLine();
-        HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_style), false );
+        HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_style), false );
     }
     else
     {
@@ -2800,7 +2800,7 @@ static Writer& OutCSS1_SwFormatDrop( Writer& rWrt, const 
SfxPoolItem& rHt )
     }
     else
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), 
false );
     }
 
     return rWrt;
@@ -3324,7 +3324,7 @@ Writer& OutCSS1_SvxBox( Writer& rWrt, const SfxPoolItem& 
rHt )
         }
         else
         {
-            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), false );
+            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), 
false );
             return rWrt;
         }
     }
diff --git a/sw/source/filter/html/htmlatr.cxx 
b/sw/source/filter/html/htmlatr.cxx
index 2c9e54a49d62..938ea1656473 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -134,7 +134,7 @@ void SwHTMLWriter::OutAndSetDefList( sal_uInt16 nNewLvl )
         {
             if( m_bLFPossible )
                 OutNewLine();
-            HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_deflist) );
+            HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_deflist) );
             IncIndentLevel();
             m_bLFPossible = true;
         }
@@ -146,7 +146,7 @@ void SwHTMLWriter::OutAndSetDefList( sal_uInt16 nNewLvl )
             DecIndentLevel();
             if( m_bLFPossible )
                 OutNewLine();
-            HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_deflist), false );
+            HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_deflist), false );
             m_bLFPossible = true;
         }
     }
@@ -158,7 +158,7 @@ void SwHTMLWriter::ChangeParaToken( HtmlTokenId nNew )
 {
     if( nNew != m_nLastParaToken && HtmlTokenId::PREFORMTXT_ON == 
m_nLastParaToken )
     {
-        HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_preformtxt), false );
+        HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_preformtxt), 
false );
         m_bLFPossible = true;
     }
     m_nLastParaToken = nNew;
@@ -772,7 +772,7 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& 
rFormat,
     if( rHWrt.m_nDefListLvl > 0 && !bForceDL )
     {
         OString aTag = bDT ? OOO_STRING_SVTOOLS_HTML_dt : 
OOO_STRING_SVTOOLS_HTML_dd;
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHWrt.GetNamespace() 
+ aTag) );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHWrt.GetNamespace() + aTag) );
     }
 
     if( pAdjItem &&
@@ -805,7 +805,7 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& 
rFormat,
     if( (!rHWrt.m_bCfgOutStyles || rHWrt.mbXHTML) && rInfo.bParaPossible && 
!bPara &&
         (bHasParSpace || bXhtmlBlockQuote || pAdjItem) )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHWrt.GetNamespace() 
+ rInfo.aToken) );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHWrt.GetNamespace() + rInfo.aToken) );
         aToken = OOO_STRING_SVTOOLS_HTML_parabreak;
         bPara = true;
         rHWrt.m_bNoAlign = false;
@@ -1000,9 +1000,9 @@ static void OutHTML_SwFormatOff( Writer& rWrt, const 
SwHTMLTextCollOutputInfo& r
         // - no styles are written and
         // - a lower spacing exists
         if( rInfo.bParaPossible && rInfo.bOutPara )
-            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_parabreak), false );
+            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_parabreak), 
false );
 
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHWrt.GetNamespace() 
+ rInfo.aToken), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHWrt.GetNamespace() + rInfo.aToken), false );
         rHWrt.m_bLFPossible =
             rInfo.aToken != OOO_STRING_SVTOOLS_HTML_dt &&
             rInfo.aToken != OOO_STRING_SVTOOLS_HTML_dd &&
@@ -1013,7 +1013,7 @@ static void OutHTML_SwFormatOff( Writer& rWrt, const 
SwHTMLTextCollOutputInfo& r
         rHWrt.DecIndentLevel();
         if( rHWrt.m_bLFPossible )
             rHWrt.OutNewLine();
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHWrt.GetNamespace() 
+ OOO_STRING_SVTOOLS_HTML_division), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_division), 
false );
         rHWrt.m_bLFPossible = true;
     }
 
@@ -2571,7 +2571,7 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
     // dot leaders: print the skipped page number in a different span element
     if (nIndexTab > -1) {
         OString sOut = OUStringToOString(rStr.subView(nIndexTab + 1), 
RTL_TEXTENCODING_ASCII_US);
-        rWrt.Strm().WriteOString( OString("</span><span>" + sOut + "</span>") 
);
+        rWrt.Strm().WriteOString( OStringConcatenation("</span><span>" + sOut 
+ "</span>") );
     }
 
     rHTMLWrt.m_bTagOn = false;
@@ -2650,9 +2650,9 @@ static Writer& OutHTML_SvxColor( Writer& rWrt, const 
SfxPoolItem& rHt )
     {
         if (rHTMLWrt.mbXHTML)
             HTMLOutFuncs::Out_AsciiTag(
-                rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
+                rWrt.Strm(), OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
         else
-            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font), false );
+            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font), 
false );
     }
 
     return rWrt;
@@ -2667,7 +2667,7 @@ static Writer& OutHTML_SwPosture( Writer& rWrt, const 
SfxPoolItem& rHt )
     const FontItalic nPosture = static_cast<const 
SvxPostureItem&>(rHt).GetPosture();
     if( ITALIC_NORMAL == nPosture )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_italic), 
rHTMLWrt.m_bTagOn );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_italic), 
rHTMLWrt.m_bTagOn );
     }
     else if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr )
     {
@@ -2716,9 +2716,9 @@ static Writer& OutHTML_SvxFont( Writer& rWrt, const 
SfxPoolItem& rHt )
     {
         if (rHTMLWrt.mbXHTML)
             HTMLOutFuncs::Out_AsciiTag(
-                rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
+                rWrt.Strm(), OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
         else
-            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font), false );
+            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font), 
false );
     }
 
     return rWrt;
@@ -2770,9 +2770,9 @@ static Writer& OutHTML_SvxFontHeight( Writer& rWrt, const 
SfxPoolItem& rHt )
     {
         if (rHTMLWrt.mbXHTML)
             HTMLOutFuncs::Out_AsciiTag(
-                rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
+                rWrt.Strm(), OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
         else
-            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font), false );
+            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font), 
false );
     }
 
     return rWrt;
@@ -2797,7 +2797,7 @@ static Writer& OutHTML_SvxLanguage( Writer& rWrt, const 
SfxPoolItem& rHt )
     }
     else
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), 
false );
     }
 
     return rWrt;
@@ -2811,7 +2811,7 @@ static Writer& OutHTML_SwWeight( Writer& rWrt, const 
SfxPoolItem& rHt )
     const FontWeight nBold = static_cast<const 
SvxWeightItem&>(rHt).GetWeight();
     if( WEIGHT_BOLD == nBold )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_bold), 
rHTMLWrt.m_bTagOn );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_bold), 
rHTMLWrt.m_bTagOn );
     }
     else if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr )
     {
@@ -2832,7 +2832,7 @@ static Writer& OutHTML_SwCrossedOut( Writer& rWrt, const 
SfxPoolItem& rHt )
     const FontStrikeout nStrike = static_cast<const 
SvxCrossedOutItem&>(rHt).GetStrikeout();
     if( STRIKEOUT_NONE != nStrike && !rHTMLWrt.mbReqIF )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_strike), 
rHTMLWrt.m_bTagOn );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_strike), 
rHTMLWrt.m_bTagOn );
     }
     else if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr )
     {
@@ -2862,7 +2862,7 @@ static Writer& OutHTML_SvxEscapement( Writer& rWrt, const 
SfxPoolItem& rHt )
 
     if( !aTag.isEmpty() )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + aTag), rHTMLWrt.m_bTagOn );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + aTag), rHTMLWrt.m_bTagOn );
     }
     else if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr )
     {
@@ -2882,7 +2882,7 @@ static Writer& OutHTML_SwUnderline( Writer& rWrt, const 
SfxPoolItem& rHt )
     const FontLineStyle eUnder = static_cast<const 
SvxUnderlineItem&>(rHt).GetLineStyle();
     if( LINESTYLE_NONE != eUnder && !rHTMLWrt.mbReqIF )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_underline), 
rHTMLWrt.m_bTagOn );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_underline), rHTMLWrt.m_bTagOn );
     }
     else if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr )
     {
@@ -2918,7 +2918,7 @@ static Writer& OutHTML_SwBlink( Writer& rWrt, const 
SfxPoolItem& rHt )
 
     if( static_cast<const SvxBlinkItem&>(rHt).GetValue() )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_blink), 
rHTMLWrt.m_bTagOn );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_blink), 
rHTMLWrt.m_bTagOn );
     }
     else if( rHTMLWrt.m_bCfgOutStyles && rHTMLWrt.m_bTextAttr )
     {
@@ -2944,7 +2944,7 @@ Writer& OutHTML_INetFormat( Writer& rWrt, const 
SwFormatINetFormat& rINetFormat,
     // bOn controls if we are writing the opening or closing tag
     if( !bOn )
     {
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_anchor), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_anchor), 
false );
         return rWrt;
     }
 
@@ -3161,7 +3161,7 @@ static Writer& OutHTML_SwTextCharFormat( Writer& rWrt, 
const SfxPoolItem& rHt )
     {
         OString aTag = !pFormatInfo->aToken.isEmpty() ? 
pFormatInfo->aToken.getStr()
                                                       : 
OOO_STRING_SVTOOLS_HTML_span;
-        HTMLOutFuncs::Out_AsciiTag(rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + aTag), false);
+        HTMLOutFuncs::Out_AsciiTag(rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + aTag), false);
     }
 
     return rWrt;
diff --git a/sw/source/filter/html/htmldrawwriter.cxx 
b/sw/source/filter/html/htmldrawwriter.cxx
index f7c0d0046b5e..fde32e78170d 100644
--- a/sw/source/filter/html/htmldrawwriter.cxx
+++ b/sw/source/filter/html/htmldrawwriter.cxx
@@ -276,7 +276,7 @@ Writer& OutHTML_DrawFrameFormatAsMarquee( Writer& rWrt,
     HTMLOutFuncs::Out_String( rWrt.Strm(), aText,
                                 rHTMLWrt.m_eDestEnc, 
&rHTMLWrt.m_aNonConvertableCharacters );
 
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_marquee), false );
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_marquee), false );
 
     if( !aEndTags.isEmpty() )
         rWrt.Strm().WriteOString( aEndTags );
diff --git a/sw/source/filter/html/htmlfldw.cxx 
b/sw/source/filter/html/htmlfldw.cxx
index c1aa24372213..bc5073c11d38 100644
--- a/sw/source/filter/html/htmlfldw.cxx
+++ b/sw/source/filter/html/htmlfldw.cxx
@@ -433,7 +433,7 @@ static Writer& OutHTML_SwField( Writer& rWrt, const 
SwField* pField,
 
     // Output the closing tag.
     if( pTypeStr )
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_sdfield), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_sdfield), false );
 
     return rWrt;
 }
@@ -571,7 +571,7 @@ Writer& OutHTML_SwFormatField( Writer& rWrt, const 
SfxPoolItem& rHt )
 
             if (bFieldShadings)
                 HTMLOutFuncs::Out_AsciiTag(
-                    rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false);
+                    rWrt.Strm(), OStringConcatenation(rHTMLWrt.GetNamespace() 
+ OOO_STRING_SVTOOLS_HTML_span), false);
         }
     }
     return rWrt;
diff --git a/sw/source/filter/html/htmlflywriter.cxx 
b/sw/source/filter/html/htmlflywriter.cxx
index f89b6a39b1e7..5cc282bf69b0 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -511,11 +511,11 @@ void SwHTMLWriter::OutFrameFormat( AllHtmlFlags nMode, 
const SwFrameFormat& rFra
         DecIndentLevel();
         if( m_bLFPossible )
             OutNewLine();
-        HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_division), false );
+        HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_division), false 
);
         m_bLFPossible = true;
     }
     else if( HtmlContainerFlags::Span == nCntnrMode )
-        HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_span), false );
+        HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_span), false );
 }
 
 OString SwHTMLWriter::OutFrameFormatOptions( const SwFrameFormat &rFrameFormat,
@@ -1432,7 +1432,7 @@ Writer& OutHTML_ImageStart( HtmlWriter& rHtml, Writer& 
rWrt, const SwFrameFormat
 
     if( !aIMapName.isEmpty() )
     {
-        rHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_usemap, OUString("#" + 
aIMapName));
+        rHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_usemap, 
OUStringConcatenation("#" + aIMapName));
     }
 
     if (bReplacement)
@@ -1658,7 +1658,7 @@ static Writer & OutHTML_FrameFormatAsMulticol( Writer& 
rWrt,
     rHTMLWrt.DecIndentLevel();  // indent the content of Multicol;
     if( rHTMLWrt.m_bLFPossible )
         rHTMLWrt.OutNewLine();
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_multicol), false );
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_multicol), false );
     rHTMLWrt.m_bLFPossible = true;
 
     return rWrt;
@@ -1745,7 +1745,7 @@ static Writer& OutHTML_FrameFormatAsDivOrSpan( Writer& 
rWrt,
     rHTMLWrt.DecIndentLevel();  // indent the content of Multicol;
     if( rHTMLWrt.m_bLFPossible )
         rHTMLWrt.OutNewLine();
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
aTag), false );
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + aTag), false );
 
     if( !aEndTags.isEmpty() )
         rWrt.Strm().WriteOString( aEndTags );
@@ -1777,8 +1777,8 @@ static void OutHTML_ImageOLEStart(SwHTMLWriter& rHTMLWrt, 
const Graphic& rGraphi
         // Refer to this data.
         aFileName = 
URIHelper::simpleNormalizedMakeRelative(rHTMLWrt.GetBaseURL(), aFileName);
         rHTMLWrt.Strm().WriteOString(
-            OString("<" + rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_object));
-        rHTMLWrt.Strm().WriteOString(OString(" data=\"" + aFileName.toUtf8() + 
"\""));
+            OStringConcatenation("<" + rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_object));
+        rHTMLWrt.Strm().WriteOString(OStringConcatenation(" data=\"" + 
aFileName.toUtf8() + "\""));
         rHTMLWrt.Strm().WriteOString(" type=\"text/rtf\"");
         rHTMLWrt.Strm().WriteOString(">");
         rHTMLWrt.OutNewLine();
@@ -1791,7 +1791,7 @@ static void OutHTML_ImageOLEEnd(SwHTMLWriter& rHTMLWrt)
     if (rHTMLWrt.mbReqIF && rHTMLWrt.m_bExportImagesAsOLE)
     {
         rHTMLWrt.Strm().WriteOString(
-            OString("</" + rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_object ">"));
+            OStringConcatenation("</" + rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_object ">"));
     }
 }
 
@@ -2071,7 +2071,7 @@ Writer& OutHTML_HeaderFooter( Writer& rWrt, const 
SwFrameFormat& rFrameFormat,
     sOut.append(OOO_STRING_SVTOOLS_HTML_division " "
             OOO_STRING_SVTOOLS_HTML_O_title "=\"")
         .append( bHeader ? "header" : "footer" ).append("\"");
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
sOut) );
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + sOut) );
 
     rHTMLWrt.IncIndentLevel();  // indent the content of Multicol;
 
@@ -2105,7 +2105,7 @@ Writer& OutHTML_HeaderFooter( Writer& rWrt, const 
SwFrameFormat& rFrameFormat,
     if( !bHeader && !aSpacer.isEmpty() )
     {
         rHTMLWrt.OutNewLine();
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + aSpacer) );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + aSpacer) );
     }
 
     {
@@ -2126,12 +2126,12 @@ Writer& OutHTML_HeaderFooter( Writer& rWrt, const 
SwFrameFormat& rFrameFormat,
     if( bHeader && !aSpacer.isEmpty() )
     {
         rHTMLWrt.OutNewLine();
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + aSpacer) );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + aSpacer) );
     }
 
     rHTMLWrt.DecIndentLevel();  // indent the content of Multicol;
     rHTMLWrt.OutNewLine();
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_division), false );
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_division), false );
 
     rHTMLWrt.m_nHeaderFooterSpace = 0;
 
diff --git a/sw/source/filter/html/htmlforw.cxx 
b/sw/source/filter/html/htmlforw.cxx
index cc1a796ee416..cd13fe78819f 100644
--- a/sw/source/filter/html/htmlforw.cxx
+++ b/sw/source/filter/html/htmlforw.cxx
@@ -437,7 +437,7 @@ void SwHTMLWriter::OutForm( bool bOn,
         DecIndentLevel(); // indent content of form
         if( m_bLFPossible )
             OutNewLine();
-        HTMLOutFuncs::Out_AsciiTag( Strm(), OString(GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_form), false );
+        HTMLOutFuncs::Out_AsciiTag( Strm(), 
OStringConcatenation(GetNamespace() + OOO_STRING_SVTOOLS_HTML_form), false );
         m_bLFPossible = true;
 
         return;
@@ -1220,12 +1220,12 @@ Writer& OutHTML_DrawFrameFormatAsControl( Writer& rWrt,
                 HTMLOutFuncs::Out_String( rWrt.Strm(), pStrings[i],
                                           rHTMLWrt.m_eDestEnc, 
&rHTMLWrt.m_aNonConvertableCharacters );
             }
-            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_option), false );
+            HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_option), 
false );
 
             rHTMLWrt.DecIndentLevel();
             rHTMLWrt.OutNewLine();// the </SELECT> gets its own line
         }
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_select), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_select), 
false );
     }
     else if( TAG_TEXTAREA == eTag )
     {
@@ -1252,7 +1252,7 @@ Writer& OutHTML_DrawFrameFormatAsControl( Writer& rWrt,
                                         rHTMLWrt.m_eDestEnc, 
&rHTMLWrt.m_aNonConvertableCharacters );
             }
         }
-        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OString(rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_textarea), false );
+        HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_textarea), false );
     }
     else if( TYPE_CHECKBOX == eType || TYPE_RADIO == eType )
     {
diff --git a/sw/source/filter/html/htmlftn.cxx 
b/sw/source/filter/html/htmlftn.cxx
index a39545631e90..a63a100ed5d9 100644
--- a/sw/source/filter/html/htmlftn.cxx
+++ b/sw/source/filter/html/htmlftn.cxx
@@ -287,12 +287,12 @@ Writer& OutHTML_SwFormatFootnote( Writer& rWrt, const 
SfxPoolItem& rHt )
         sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_sdfixed);
     sOut.append(">");
     rWrt.Strm().WriteOString( sOut.makeStringAndClear() );
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_superscript ));
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_superscript ));
 
     HTMLOutFuncs::Out_String( rWrt.Strm(), 
rFormatFootnote.GetViewNumStr(*rWrt.m_pDoc, nullptr),
                                  rHTMLWrt.m_eDestEnc, 
&rHTMLWrt.m_aNonConvertableCharacters );
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_superscript), false );
-    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OString(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_anchor), false );
+    HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), 
OStringConcatenation(rHTMLWrt.GetNamespace() + 
OOO_STRING_SVTOOLS_HTML_superscript), false );

... etc. - the rest is truncated

Reply via email to