summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qarraydatapointer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qarraydatapointer.h')
-rw-r--r--src/corelib/tools/qarraydatapointer.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h
index 3d850c0144..1f81689af3 100644
--- a/src/corelib/tools/qarraydatapointer.h
+++ b/src/corelib/tools/qarraydatapointer.h
@@ -55,6 +55,9 @@ private:
public:
typedef typename Data::iterator iterator;
typedef typename Data::const_iterator const_iterator;
+ enum { pass_parameter_by_value = std::is_fundamental<T>::value || std::is_pointer<T>::value };
+
+ typedef typename std::conditional<pass_parameter_by_value, T, const T &>::type parameter_type;
QArrayDataPointer() noexcept
: d(Data::sharedNull()), ptr(Data::sharedNullData()), size(0)
@@ -131,8 +134,8 @@ public:
~QArrayDataPointer()
{
- if (!d->deref()) {
- if (d->isMutable())
+ if (!deref()) {
+ if (isMutable())
(*this)->destroyAll();
Data::deallocate(d);
}