On 17.03.25 20:09, Jøger Hansegård via Development wrote: [...] > I agree that it would be nice to have a compiler error but given that > QStringList behaves the same way as std::vector, I am not sure it is a bug.
For the specific case of QList, we could take first and last by reference, preventing the decay of the argument to pointers, and thus to something that looks like iterators. But that's shotgun surgery. Everywhere else (incl. STL) iterators are passed by value, and make arguments decay. The solution, as others have pointed out, is simple: don't use C string literals to initialize QStrings. Define QT_NO_CAST_FROM_ASCII (and _TO_ASCII, _FROM_BYTEARRAY, to fix two other gotchas), and use Qt::StringLiteral UDLs, which make QT_NO_CAST_FROM_ASCII bearable for the first time in Qt's history. Also, get into the habit of using {} instead of () unless you need to tie-break between an initializer_list constructor and non-initializer_list one. It also prevents narrowing. Daunting for an existing project to implement, but trivial if you just start out. The action point for Qt itself is to avoid APIs that depend too much on implicit conversion and overloading. Prefer named constructors (QList::fromRange), and explicit function names (appendString()/appendByteArray() instead of append(QString)/append(QByteArray)). Make ctors and conversion operator explicit. Thanks, Marc -- Marc Mutz <marc.m...@qt.io> (he/his) Principal Software Engineer The Qt Company Erich-Thilo-Str. 10 12489 Berlin, Germany www.qt.io Geschäftsführer: Mika Pälsi, Juha Varelius, Jouni Lintunen Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg, HRB 144331 B -- Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development