Mark all ctors of [[nodiscard]] classes as Q_NODISCARD_CTOR
This works around around the difference in class-level [[nodiscard]] behavior between Clang and GCC. While Clang already warns about QClass(~~~args~~~); when QClass is marked as [[nodiscard]] at the class level, GCC does not, and requires the ctor to be marked as [[nodiscard]] instead. Fixes: QTBUG-104164 Change-Id: Ifd7076ee422fb9472ae8bbba43d9bfeee1968a78 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 603d6351cc32d07a5e4c349d6dc3db0889c3b120) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
295ecd9b87
commit
d082bf07a9
@ -41,6 +41,7 @@ class [[nodiscard]] QNtfsPermissionCheckGuard
|
|||||||
{
|
{
|
||||||
Q_DISABLE_COPY_MOVE(QNtfsPermissionCheckGuard)
|
Q_DISABLE_COPY_MOVE(QNtfsPermissionCheckGuard)
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QNtfsPermissionCheckGuard()
|
QNtfsPermissionCheckGuard()
|
||||||
{
|
{
|
||||||
qEnableNtfsPermissionChecks();
|
qEnableNtfsPermissionChecks();
|
||||||
|
@ -57,6 +57,7 @@ class [[nodiscard]] QScopedPropertyUpdateGroup
|
|||||||
{
|
{
|
||||||
Q_DISABLE_COPY_MOVE(QScopedPropertyUpdateGroup)
|
Q_DISABLE_COPY_MOVE(QScopedPropertyUpdateGroup)
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QScopedPropertyUpdateGroup()
|
QScopedPropertyUpdateGroup()
|
||||||
{ Qt::beginPropertyUpdateGroup(); }
|
{ Qt::beginPropertyUpdateGroup(); }
|
||||||
~QScopedPropertyUpdateGroup() noexcept(false)
|
~QScopedPropertyUpdateGroup() noexcept(false)
|
||||||
@ -290,6 +291,7 @@ class [[nodiscard]] QPropertyChangeHandler : public QPropertyObserver
|
|||||||
{
|
{
|
||||||
Functor m_handler;
|
Functor m_handler;
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QPropertyChangeHandler(Functor handler)
|
QPropertyChangeHandler(Functor handler)
|
||||||
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
||||||
auto This = static_cast<QPropertyChangeHandler<Functor>*>(self);
|
auto This = static_cast<QPropertyChangeHandler<Functor>*>(self);
|
||||||
@ -300,6 +302,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename Property, typename = typename Property::InheritsQUntypedPropertyData>
|
template<typename Property, typename = typename Property::InheritsQUntypedPropertyData>
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QPropertyChangeHandler(const Property &property, Functor handler)
|
QPropertyChangeHandler(const Property &property, Functor handler)
|
||||||
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
||||||
auto This = static_cast<QPropertyChangeHandler<Functor>*>(self);
|
auto This = static_cast<QPropertyChangeHandler<Functor>*>(self);
|
||||||
@ -315,8 +318,10 @@ class [[nodiscard]] QPropertyNotifier : public QPropertyObserver
|
|||||||
{
|
{
|
||||||
std::function<void()> m_handler;
|
std::function<void()> m_handler;
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QPropertyNotifier() = default;
|
QPropertyNotifier() = default;
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QPropertyNotifier(Functor handler)
|
QPropertyNotifier(Functor handler)
|
||||||
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
||||||
auto This = static_cast<QPropertyNotifier *>(self);
|
auto This = static_cast<QPropertyNotifier *>(self);
|
||||||
@ -327,6 +332,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename Functor, typename Property, typename = typename Property::InheritsQUntypedPropertyData>
|
template<typename Functor, typename Property, typename = typename Property::InheritsQUntypedPropertyData>
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QPropertyNotifier(const Property &property, Functor handler)
|
QPropertyNotifier(const Property &property, Functor handler)
|
||||||
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
: QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) {
|
||||||
auto This = static_cast<QPropertyNotifier *>(self);
|
auto This = static_cast<QPropertyNotifier *>(self);
|
||||||
|
@ -99,6 +99,7 @@ struct [[nodiscard]] QPropertyObserverNodeProtector
|
|||||||
Q_DISABLE_COPY_MOVE(QPropertyObserverNodeProtector)
|
Q_DISABLE_COPY_MOVE(QPropertyObserverNodeProtector)
|
||||||
|
|
||||||
QPropertyObserverBase m_placeHolder;
|
QPropertyObserverBase m_placeHolder;
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QPropertyObserverNodeProtector(QPropertyObserver *observer)
|
QPropertyObserverNodeProtector(QPropertyObserver *observer)
|
||||||
{
|
{
|
||||||
// insert m_placeholder after observer into the linked list
|
// insert m_placeholder after observer into the linked list
|
||||||
|
@ -52,11 +52,13 @@ public:
|
|||||||
//
|
//
|
||||||
// std::atomic:
|
// std::atomic:
|
||||||
//
|
//
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr
|
explicit constexpr
|
||||||
QAtomicScopedValueRollback(std::atomic<T> &var,
|
QAtomicScopedValueRollback(std::atomic<T> &var,
|
||||||
std::memory_order mo = std::memory_order_seq_cst)
|
std::memory_order mo = std::memory_order_seq_cst)
|
||||||
: m_atomic(var), m_value(var.load(mo)), m_mo(mo) {}
|
: m_atomic(var), m_value(var.load(mo)), m_mo(mo) {}
|
||||||
|
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr
|
explicit constexpr
|
||||||
QAtomicScopedValueRollback(std::atomic<T> &var, T value,
|
QAtomicScopedValueRollback(std::atomic<T> &var, T value,
|
||||||
std::memory_order mo = std::memory_order_seq_cst)
|
std::memory_order mo = std::memory_order_seq_cst)
|
||||||
@ -65,11 +67,13 @@ public:
|
|||||||
//
|
//
|
||||||
// Q(Basic)AtomicInteger:
|
// Q(Basic)AtomicInteger:
|
||||||
//
|
//
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr
|
explicit constexpr
|
||||||
QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var,
|
QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var,
|
||||||
std::memory_order mo = std::memory_order_seq_cst)
|
std::memory_order mo = std::memory_order_seq_cst)
|
||||||
: QAtomicScopedValueRollback(var._q_value, mo) {}
|
: QAtomicScopedValueRollback(var._q_value, mo) {}
|
||||||
|
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr
|
explicit constexpr
|
||||||
QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, T value,
|
QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, T value,
|
||||||
std::memory_order mo = std::memory_order_seq_cst)
|
std::memory_order mo = std::memory_order_seq_cst)
|
||||||
@ -78,11 +82,13 @@ public:
|
|||||||
//
|
//
|
||||||
// Q(Basic)AtomicPointer:
|
// Q(Basic)AtomicPointer:
|
||||||
//
|
//
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr
|
explicit constexpr
|
||||||
QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var,
|
QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var,
|
||||||
std::memory_order mo = std::memory_order_seq_cst)
|
std::memory_order mo = std::memory_order_seq_cst)
|
||||||
: QAtomicScopedValueRollback(var._q_value, mo) {}
|
: QAtomicScopedValueRollback(var._q_value, mo) {}
|
||||||
|
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr
|
explicit constexpr
|
||||||
QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, T value,
|
QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, T value,
|
||||||
std::memory_order mo = std::memory_order_seq_cst)
|
std::memory_order mo = std::memory_order_seq_cst)
|
||||||
|
@ -70,6 +70,7 @@ template <typename T, typename Cleanup = QScopedPointerDeleter<T> >
|
|||||||
class [[nodiscard]] QScopedPointer
|
class [[nodiscard]] QScopedPointer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit QScopedPointer(T *p = nullptr) noexcept : d(p)
|
explicit QScopedPointer(T *p = nullptr) noexcept : d(p)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -192,10 +193,12 @@ class [[nodiscard]] QScopedArrayPointer : public QScopedPointer<T, Cleanup>
|
|||||||
template <typename Ptr>
|
template <typename Ptr>
|
||||||
using if_same_type = typename std::enable_if<std::is_same<typename std::remove_cv<T>::type, Ptr>::value, bool>::type;
|
using if_same_type = typename std::enable_if<std::is_same<typename std::remove_cv<T>::type, Ptr>::value, bool>::type;
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(nullptr) {}
|
inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(nullptr) {}
|
||||||
inline ~QScopedArrayPointer() = default;
|
inline ~QScopedArrayPointer() = default;
|
||||||
|
|
||||||
template <typename D, if_same_type<D> = true>
|
template <typename D, if_same_type<D> = true>
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit QScopedArrayPointer(D *p)
|
explicit QScopedArrayPointer(D *p)
|
||||||
: QScopedPointer<T, Cleanup>(p)
|
: QScopedPointer<T, Cleanup>(p)
|
||||||
{
|
{
|
||||||
|
@ -12,11 +12,13 @@ template <typename T>
|
|||||||
class [[nodiscard]] QScopedValueRollback
|
class [[nodiscard]] QScopedValueRollback
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr QScopedValueRollback(T &var)
|
explicit constexpr QScopedValueRollback(T &var)
|
||||||
: varRef(var), oldValue(var)
|
: varRef(var), oldValue(var)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit constexpr QScopedValueRollback(T &var, T value)
|
explicit constexpr QScopedValueRollback(T &var, T value)
|
||||||
: varRef(var), oldValue(std::move(var)) // ### C++20: std::exchange(var, std::move(value))
|
: varRef(var), oldValue(std::move(var)) // ### C++20: std::exchange(var, std::move(value))
|
||||||
{
|
{
|
||||||
|
@ -16,16 +16,19 @@ template <typename F>
|
|||||||
class [[nodiscard]] QScopeGuard
|
class [[nodiscard]] QScopeGuard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit QScopeGuard(F &&f) noexcept
|
explicit QScopeGuard(F &&f) noexcept
|
||||||
: m_func(std::move(f))
|
: m_func(std::move(f))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
explicit QScopeGuard(const F &f) noexcept
|
explicit QScopeGuard(const F &f) noexcept
|
||||||
: m_func(f)
|
: m_func(f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Q_NODISCARD_CTOR
|
||||||
QScopeGuard(QScopeGuard &&other) noexcept
|
QScopeGuard(QScopeGuard &&other) noexcept
|
||||||
: m_func(std::move(other.m_func))
|
: m_func(std::move(other.m_func))
|
||||||
, m_invoke(std::exchange(other.m_invoke, false))
|
, m_invoke(std::exchange(other.m_invoke, false))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user