On Monday 26 August 2024 12:59:54 GMT-7 Marc Mutz via Development wrote: > Part of why I'm sympathetic to the assertions throw mantra is that I > used it very successfully in Kleopatra way back when. We could easily > take the exception's what() and report back over the UI server channel > that an assertion happened and the client would show a message box with > the assertion details, copyable from a QMessageBox into a bugreport. > T'was a boon for testing.
Only developers would be interested in seeing exception names. Regular users won't understand what that exception means and will just be confused. I am also vehemently against catching exceptions you don't have a recovery code path for. That destroys the stack trace and state that would have helped the developer understand and actually fix the problem. I suppose it's possible someone will use preconditions for recoverable conditions, but I've never seen that even proposed, for any API. More importantly, for the cases we have at hand, like: static Qt::strong_ordering compareThreeWay_helper(const Iterator &lhs, const Iterator &rhs) noexcept { Q_ASSERT(lhs.item.d == rhs.item.d); return Qt::compareThreeWay(lhs.item.i, rhs.item.i); } The most likely reason for violating this precondition is that the caller is already corrupt and totally lost. I don't see how it could recover. Another example is: QUuid QCborValue::toUuid(const QUuid &defaultValue) const { if (!container || !isUuid() || container->elements.size() != 2) return defaultValue; Q_ASSERT(n == -1); const ByteData *byteData = container->byteData(1); if (!byteData) return defaultValue; // UUIDs must always be 16 bytes, so this must be invalid return QUuid::fromRfc4122(byteData->asByteArrayView()); } This is verifying an internal invariant state, not a precondition. The only two reasons this assertion would trigger are a buggy implementation or corrupted memory. Neither of which you can recover from with C++ code. [This code isn't noexcept because QUuid::fromRfc4122 wasn't noexcept when it was written] -- Thiago Macieira - thiago.macieira (AT) intel.com Principal Engineer - Intel DCAI Platform & System Engineering
smime.p7s
Description: S/MIME cryptographic signature
-- Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development