Reject const T*
-convertible types in QCommonArrayOps::copyAppend<It>
In many cases (e.g. relocatable and pod), generic version is more expensive. Let's not expect array data ops to only get QADP iterators as input. Instead, reject generic version for any const T* -convertible iterator and force compiler to select copyAppend(const T *b, const T *e) as a suitable overload Change-Id: I47a09d35a8ff15322381c2aa28258bfc7deebbad Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
89391da882
commit
a5592293f8
@ -1267,8 +1267,8 @@ public:
|
||||
|
||||
template<typename It>
|
||||
void copyAppend(It b, It e, QtPrivate::IfIsForwardIterator<It> = true,
|
||||
QtPrivate::IfIsNotSame<std::decay_t<It>, iterator> = true,
|
||||
QtPrivate::IfIsNotSame<std::decay_t<It>, const_iterator> = true)
|
||||
QtPrivate::IfIsNotConvertible<It, const T *> = true,
|
||||
QtPrivate::IfIsNotConvertible<It, const T *> = true)
|
||||
{
|
||||
Q_ASSERT(this->isMutable() || b == e);
|
||||
Q_ASSERT(!this->isShared() || b == e);
|
||||
|
@ -147,6 +147,9 @@ using IfAssociativeIteratorHasFirstAndSecond =
|
||||
template <typename T, typename U>
|
||||
using IfIsNotSame =
|
||||
typename std::enable_if<!std::is_same<T, U>::value, bool>::type;
|
||||
|
||||
template<typename T, typename U>
|
||||
using IfIsNotConvertible = typename std::enable_if<!std::is_convertible<T, U>::value, bool>::type;
|
||||
} // namespace QtPrivate
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
Loading…
x
Reference in New Issue
Block a user