diff options
Diffstat (limited to 'src/corelib/tools/qscopedpointer.h')
-rw-r--r-- | src/corelib/tools/qscopedpointer.h | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index 92d7df6e5d..2a4083466b 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -97,7 +97,7 @@ class QScopedPointer { typedef T *QScopedPointer:: *RestrictedBool; public: - explicit QScopedPointer(T *p = Q_NULLPTR) Q_DECL_NOTHROW : d(p) + explicit QScopedPointer(T *p = nullptr) Q_DECL_NOTHROW : d(p) { } @@ -126,12 +126,12 @@ public: #if defined(Q_QDOC) inline operator bool() const { - return isNull() ? Q_NULLPTR : &QScopedPointer::d; + return isNull() ? nullptr : &QScopedPointer::d; } #else operator RestrictedBool() const Q_DECL_NOTHROW { - return isNull() ? Q_NULLPTR : &QScopedPointer::d; + return isNull() ? nullptr : &QScopedPointer::d; } #endif @@ -140,12 +140,17 @@ public: return d; } + T *get() const Q_DECL_NOTHROW + { + return d; + } + bool isNull() const Q_DECL_NOTHROW { return !d; } - void reset(T *other = Q_NULLPTR) Q_DECL_NOEXCEPT_EXPR(noexcept(Cleanup::cleanup(std::declval<T *>()))) + void reset(T *other = nullptr) Q_DECL_NOEXCEPT_EXPR(noexcept(Cleanup::cleanup(std::declval<T *>()))) { if (d == other) return; @@ -157,7 +162,7 @@ public: T *take() Q_DECL_NOTHROW { T *oldD = d; - d = Q_NULLPTR; + d = nullptr; return oldD; } @@ -215,21 +220,16 @@ template <class T, class Cleanup> inline void swap(QScopedPointer<T, Cleanup> &p1, QScopedPointer<T, Cleanup> &p2) Q_DECL_NOTHROW { p1.swap(p2); } - -namespace QtPrivate { - template <typename X, typename Y> struct QScopedArrayEnsureSameType; - template <typename X> struct QScopedArrayEnsureSameType<X,X> { typedef X* Type; }; - template <typename X> struct QScopedArrayEnsureSameType<const X, X> { typedef X* Type; }; -} - template <typename T, typename Cleanup = QScopedPointerArrayDeleter<T> > class QScopedArrayPointer : public QScopedPointer<T, Cleanup> { + template <typename Ptr> + using if_same_type = typename std::enable_if<std::is_same<typename std::remove_cv<T>::type, Ptr>::value, bool>::type; public: - inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(Q_NULLPTR) {} + inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(nullptr) {} - template <typename D> - explicit inline QScopedArrayPointer(D *p, typename QtPrivate::QScopedArrayEnsureSameType<T,D>::Type = Q_NULLPTR) + template <typename D, if_same_type<D> = true> + explicit QScopedArrayPointer(D *p) : QScopedPointer<T, Cleanup>(p) { } |