QAtomic: make ctors constexpr, if possible
This requires using the same chain of conditions that QBasicAtomic* uses in order to provide constructors, so we're using the newly-added macro QT_BASIC_ATOMIC_HAS_CONSTRUCTORS to check. Even though QAtomic<> is a template, we can't just use Q_DECL_CONSTEXPR since the body of the constructors needs to change, too. Change-Id: I462a80ed175040f7709c30d07d34036c6c5507d8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
21072c85b6
commit
31788fc981
@ -61,10 +61,14 @@ class QAtomicInt : public QBasicAtomicInt
|
||||
{
|
||||
public:
|
||||
// Non-atomic API
|
||||
#ifdef Q_BASIC_ATOMIC_HAS_CONSTRUCTORS
|
||||
constexpr QAtomicInt(int value = 0) Q_DECL_NOTHROW : QBasicAtomicInt(value) {}
|
||||
#else
|
||||
inline QAtomicInt(int value = 0) Q_DECL_NOTHROW
|
||||
{
|
||||
_q_value = value;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline QAtomicInt(const QAtomicInt &other) Q_DECL_NOTHROW
|
||||
{
|
||||
@ -115,10 +119,14 @@ template <typename T>
|
||||
class QAtomicPointer : public QBasicAtomicPointer<T>
|
||||
{
|
||||
public:
|
||||
#ifdef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS
|
||||
constexpr QAtomicPointer(T *value = 0) Q_DECL_NOTHROW : QBasicAtomicPointer<T>(value) {}
|
||||
#else
|
||||
inline QAtomicPointer(T *value = 0) Q_DECL_NOTHROW
|
||||
{
|
||||
this->store(value);
|
||||
}
|
||||
#endif
|
||||
inline QAtomicPointer(const QAtomicPointer<T> &other) Q_DECL_NOTHROW
|
||||
{
|
||||
this->store(other.load());
|
||||
@ -161,6 +169,10 @@ public:
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#ifdef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS
|
||||
# undef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS
|
||||
#endif
|
||||
|
||||
/*!
|
||||
This is a helper for the assignment operators of implicitly
|
||||
shared classes. Your assignment operator should look like this:
|
||||
|
Loading…
x
Reference in New Issue
Block a user