https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120358
--- Comment #18 from Holger Hoffstätte <hol...@applied-asynchrony.com> --- Furthermore, using an explicit std::move to the first test like this: auto joined = expected.join(u'.'); auto tok = qTokenize(std::move(joined), QLatin1Char('.'), Qt::CaseSensitive, Qt::SkipEmptyParts); results in *both* tests using HaystackPinning and working as expected - though in the second case that might be accidental state reuse, which is also concerning: Breakpoint 1, dump<QStringTokenizer<QString, QChar> > (tok=...) at /usr/include/qt6/QtCore/qstringtokenizer.h:377 377 auto QStringTokenizerBase<Haystack, Needle>::next(tokenizer_state state) const noexcept -> next_result (gdb) p tok $6 = (QStringTokenizer<QString, QChar> &) @0x7fffffffde40: {<QtPrivate::Tok::HaystackPinning<QString>> = {<QtPrivate::Tok::Pinning<QString, true>> = {m_string = {d = { d = 0x55555556f640, ptr = 0x55555556f650 u"a.ab.abc.abcd.abcde", size = 19}}}, <No data fields>}, <QtPrivate::Tok::NeedlePinning<QChar>> = {<QtPrivate::Tok::Pinning<QChar, false>> = {<No data fields>}, <No data fields>}, <QStringTokenizerBase<QStringView, QChar>> = {<QStringTokenizerBaseBase> = { m_sb = {<QtPrivate::QFlagsStorageHelper<Qt::SplitBehaviorFlags, 4>> = {<QtPrivate::QFlagsStorage<Qt::SplitBehaviorFlags>> = {static IntegerSize = 4, i = 1}, <No data fields>}, <No data fields>}, m_cs = Qt::CaseSensitive}, m_haystack = {m_size = 19, m_data = 0x55555556f650 u"a.ab.abc.abcd.abcde"}, m_needle = { ucs = 46 u'.'}}, <No data fields>} (gdb) c Continuing. 1 2 3 4 5 Breakpoint 1, dump<QStringTokenizer<QString, QChar> > (tok=...) at /usr/include/qt6/QtCore/qstringtokenizer.h:377 377 auto QStringTokenizerBase<Haystack, Needle>::next(tokenizer_state state) const noexcept -> next_result (gdb) p tok $7 = (QStringTokenizer<QString, QChar> &) @0x7fffffffde40: {<QtPrivate::Tok::HaystackPinning<QString>> = {<QtPrivate::Tok::Pinning<QString, true>> = {m_string = {d = { d = 0x55555556f640, ptr = 0x55555556f650 u"a.ab.abc.abcd.abcde", size = 19}}}, <No data fields>}, <QtPrivate::Tok::NeedlePinning<QChar>> = {<QtPrivate::Tok::Pinning<QChar, false>> = {<No data fields>}, <No data fields>}, <QStringTokenizerBase<QStringView, QChar>> = {<QStringTokenizerBaseBase> = { m_sb = {<QtPrivate::QFlagsStorageHelper<Qt::SplitBehaviorFlags, 4>> = {<QtPrivate::QFlagsStorage<Qt::SplitBehaviorFlags>> = {static IntegerSize = 4, i = 1}, <No data fields>}, <No data fields>}, m_cs = Qt::CaseSensitive}, m_haystack = {m_size = 19, m_data = 0x55555556f650 u"a.ab.abc.abcd.abcde"}, m_needle = { ucs = 46 u'.'}}, <No data fields>} (gdb) c Continuing. 1 2 3 4 5 Consequently the problematic second test (testNotOK) can be "fixed" by: auto tok = qTokenize(std::move(expected.join(u'.')), QLatin1Char('.'), Qt::CaseSensitive, Qt::SkipEmptyParts); Hope this helps.