summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread/qatomic.h
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2012-07-01 23:22:38 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-20 16:58:36 +0200
commit31788fc9818c9914d50c1a6a842d3dda16a26172 (patch)
treebd5c883b25c779e17ce8dc72298bf9b3b3c67eaa /src/corelib/thread/qatomic.h
parent21072c85b64f301f42b6fe0694dcdb0a571a7893 (diff)
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>
Diffstat (limited to 'src/corelib/thread/qatomic.h')
-rw-r--r--src/corelib/thread/qatomic.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h
index 7b0f6bc69f..6aa8821742 100644
--- a/src/corelib/thread/qatomic.h
+++ b/src/corelib/thread/qatomic.h
@@ -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: