From 247ab241c783f776489d8bc348a84cb533079241 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 28 Jul 2019 14:43:24 +0300 Subject: QVector/QList/QLinkedList/QVarLengthArray/QSet: add missing deduction guides Amends 2e1763d83a1dacfc5b747934fb77fa7cec7bfe47. The new range ctors need deduction guides, since the compiler can't deduce the value_type from a pair of iterators. Change-Id: I3ec1e5f91305b317c443b6a70246be416b55bad9 Reviewed-by: Volker Hilsheimer Reviewed-by: Thiago Macieira --- src/corelib/tools/qlinkedlist.h | 7 +++++++ src/corelib/tools/qlist.h | 7 +++++++ src/corelib/tools/qset.h | 7 +++++++ src/corelib/tools/qvarlengtharray.h | 7 +++++++ src/corelib/tools/qvector.h | 7 +++++++ 5 files changed, 35 insertions(+) (limited to 'src/corelib/tools') diff --git a/src/corelib/tools/qlinkedlist.h b/src/corelib/tools/qlinkedlist.h index 996a50fd1b..8970d39be0 100644 --- a/src/corelib/tools/qlinkedlist.h +++ b/src/corelib/tools/qlinkedlist.h @@ -275,6 +275,13 @@ private: template Q_DECLARE_TYPEINFO_BODY(QLinkedList, Q_MOVABLE_TYPE|Q_RELOCATABLE_TYPE); +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 +template ::value_type, + QtPrivate::IfIsInputIterator = true> +QLinkedList(InputIterator, InputIterator) -> QLinkedList; +#endif + template inline QLinkedList::~QLinkedList() { diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index 70bbc11ad2..471e16886f 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -446,6 +446,13 @@ private: inline int count_impl(const T &, QListData::ArrayCompatibleLayout) const; }; +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 +template ::value_type, + QtPrivate::IfIsInputIterator = true> +QList(InputIterator, InputIterator) -> QList; +#endif + #if defined(Q_CC_BOR) template Q_INLINE_TEMPLATE T &QList::Node::t() diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h index 19d6982133..2e72832185 100644 --- a/src/corelib/tools/qset.h +++ b/src/corelib/tools/qset.h @@ -269,6 +269,13 @@ private: } }; +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 +template ::value_type, + QtPrivate::IfIsInputIterator = true> +QSet(InputIterator, InputIterator) -> QSet; +#endif + template uint qHash(const QSet &key, uint seed = 0) noexcept(noexcept(qHashRangeCommutative(key.begin(), key.end(), seed))) diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h index 2f62526076..253d05ba2b 100644 --- a/src/corelib/tools/qvarlengtharray.h +++ b/src/corelib/tools/qvarlengtharray.h @@ -265,6 +265,13 @@ private: } }; +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 +template ::value_type, + QtPrivate::IfIsInputIterator = true> +QVarLengthArray(InputIterator, InputIterator) -> QVarLengthArray; +#endif + template Q_INLINE_TEMPLATE QVarLengthArray::QVarLengthArray(int asize) : s(asize) { diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index ebe6527d89..62fbdb4a2a 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -326,6 +326,13 @@ private: class AlignmentDummy { Data header; T array[1]; }; }; +#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201606 +template ::value_type, + QtPrivate::IfIsInputIterator = true> +QVector(InputIterator, InputIterator) -> QVector; +#endif + #ifdef Q_CC_MSVC // behavior change: an object of POD type constructed with an initializer of the form () // will be default-initialized -- cgit v1.2.3