diff options
| author | Thiago Macieira <thiago.macieira@intel.com> | 2022-07-27 14:59:35 -0700 |
|---|---|---|
| committer | Thiago Macieira <thiago.macieira@intel.com> | 2022-07-30 07:27:55 -0700 |
| commit | 3fcb0237dc718bc3605b231a1079ba9dfb5219b1 (patch) | |
| tree | 254c72898c10246f3cc0a7a03b5b14ac5a41e1f1 /src/corelib/kernel/qvariant.cpp | |
| parent | e540d4a8647c41a3e710a555f5dcc44edb7dfcb4 (diff) | |
QVariant: update the noexcept content for a few types
Commit 2f0a625fd4036b71286dfa7de4c9d795025164e7 added noexcept for
these, but didn't verify that the operation itself was noexcept. And it
wasn't on 32-bit systems, because sizeof(void *) is only 4 bytes, making
QVariant and QVariant::Private a mere 12 bytes. That's insufficient for
QUuid and for almost all geometric types when qreal==double.
We can't use sizeof() in qvariant.h because most of those classes are
only forward-declared.
Change-Id: I6f936da6f6e84d649f70fffd1705ce948891d06a
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/corelib/kernel/qvariant.cpp')
| -rw-r--r-- | src/corelib/kernel/qvariant.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index fa8bc16fb40..1b37e689f58 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -895,16 +895,22 @@ QVariant::QVariant(QLatin1StringView val) : QVariant(QString(val)) {} QVariant::QVariant(const QEasingCurve &val) : d(std::piecewise_construct_t{}, val) {} #endif #ifndef QT_NO_GEOM_VARIANT -QVariant::QVariant(QPoint pt) noexcept : d(std::piecewise_construct_t{}, pt) {} -QVariant::QVariant(QPointF pt) noexcept : d(std::piecewise_construct_t{}, pt) {} -QVariant::QVariant(QRect r) noexcept : d(std::piecewise_construct_t{}, r) {} -QVariant::QVariant(QRectF r) noexcept(sizeof(qreal) * 4 <= Private::MaxInternalSize) +QVariant::QVariant(QPoint pt) noexcept + : d(std::piecewise_construct_t{}, pt) {} +QVariant::QVariant(QPointF pt) noexcept(Private::FitsInInternalSize<sizeof(qreal) * 2>) + : d(std::piecewise_construct_t{}, pt) {} +QVariant::QVariant(QRect r) noexcept(Private::FitsInInternalSize<sizeof(int) * 4>) : d(std::piecewise_construct_t{}, r) {} -QVariant::QVariant(QLine l) noexcept : d(std::piecewise_construct_t{}, l) {} -QVariant::QVariant(QLineF l) noexcept(sizeof(qreal) * 4 <= Private::MaxInternalSize) +QVariant::QVariant(QRectF r) noexcept(Private::FitsInInternalSize<sizeof(qreal) * 4>) + : d(std::piecewise_construct_t{}, r) {} +QVariant::QVariant(QLine l) noexcept(Private::FitsInInternalSize<sizeof(int) * 4>) + : d(std::piecewise_construct_t{}, l) {} +QVariant::QVariant(QLineF l) noexcept(Private::FitsInInternalSize<sizeof(qreal) * 4>) : d(std::piecewise_construct_t{}, l) {} -QVariant::QVariant(QSize s) noexcept : d(std::piecewise_construct_t{}, s) {} -QVariant::QVariant(QSizeF s) noexcept : d(std::piecewise_construct_t{}, s) {} +QVariant::QVariant(QSize s) noexcept + : d(std::piecewise_construct_t{}, s) {} +QVariant::QVariant(QSizeF s) noexcept(Private::FitsInInternalSize<sizeof(qreal) * 2>) + : d(std::piecewise_construct_t{}, s) {} #endif #ifndef QT_BOOTSTRAPPED QVariant::QVariant(const QUrl &u) : d(std::piecewise_construct_t{}, u) {} @@ -913,7 +919,7 @@ QVariant::QVariant(const QLocale &l) : d(std::piecewise_construct_t{}, l) {} #if QT_CONFIG(regularexpression) QVariant::QVariant(const QRegularExpression &re) : d(std::piecewise_construct_t{}, re) {} #endif // QT_CONFIG(regularexpression) -QVariant::QVariant(QUuid uuid) noexcept : d(std::piecewise_construct_t{}, uuid) {} +QVariant::QVariant(QUuid uuid) noexcept(Private::FitsInInternalSize<16>) : d(std::piecewise_construct_t{}, uuid) {} #ifndef QT_BOOTSTRAPPED QVariant::QVariant(const QJsonValue &jsonValue) : d(std::piecewise_construct_t{}, jsonValue) {} QVariant::QVariant(const QJsonObject &jsonObject) : d(std::piecewise_construct_t{}, jsonObject) {} @@ -921,7 +927,8 @@ QVariant::QVariant(const QJsonArray &jsonArray) : d(std::piecewise_construct_t{} QVariant::QVariant(const QJsonDocument &jsonDocument) : d(std::piecewise_construct_t{}, jsonDocument) {} #endif // QT_BOOTSTRAPPED #if QT_CONFIG(itemmodel) -QVariant::QVariant(const QModelIndex &modelIndex) noexcept : d(std::piecewise_construct_t{}, modelIndex) {} +QVariant::QVariant(const QModelIndex &modelIndex) noexcept(Private::FitsInInternalSize<8 + 2 * sizeof(quintptr)>) + : d(std::piecewise_construct_t{}, modelIndex) {} QVariant::QVariant(const QPersistentModelIndex &modelIndex) : d(std::piecewise_construct_t{}, modelIndex) {} #endif |
