summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qset.qdoc
diff options
context:
space:
mode:
authorMartin Smith <martin.smith@qt.io>2017-09-13 12:07:28 +0200
committerMartin Smith <martin.smith@qt.io>2017-12-01 10:48:22 +0000
commitb23c52ea8110f05def21713934fcc6131f44ec6a (patch)
treeab6de0140a78f2bbbe559a0a1708cda45a0f784b /src/corelib/tools/qset.qdoc
parent32326a4b3b8234f56bb1c5f47b5bdd6c8fec7917 (diff)
Add template text to \fn commands in container classes
The \fn commands were not recognized by clang-qdoc because the template stuff was missing from the \fn commands. This update adds the correct template text and parameters. It eliminates nearly 2000 qdoc warnings. Change-Id: Ibe047424396a8f99f8bd64efea1b0d8cc7c7527d Reviewed-by: Topi Reiniƶ <topi.reinio@qt.io>
Diffstat (limited to 'src/corelib/tools/qset.qdoc')
-rw-r--r--src/corelib/tools/qset.qdoc196
1 files changed, 98 insertions, 98 deletions
diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc
index 93f157fdc5..48863f2399 100644
--- a/src/corelib/tools/qset.qdoc
+++ b/src/corelib/tools/qset.qdoc
@@ -96,14 +96,14 @@
*/
/*!
- \fn QSet::QSet()
+ \fn template <class T> QSet<T>::QSet()
Constructs an empty set.
\sa clear()
*/
-/*! \fn QSet::QSet(std::initializer_list<T> list)
+/*! \fn template <class T> QSet<T>::QSet(std::initializer_list<T> list)
\since 5.1
Constructs a set with a copy of each of the elements in the
@@ -114,14 +114,14 @@
*/
/*!
- \fn void QSet::swap(QSet<T> &other)
+ \fn template <class T> void QSet<T>::swap(QSet<T> &other)
Swaps set \a other with this set. This operation is very fast and
never fails.
*/
/*!
- \fn bool QSet::operator==(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::operator==(const QSet<T> &other) const
Returns \c true if the \a other set is equal to this set; otherwise
returns \c false.
@@ -134,7 +134,7 @@
*/
/*!
- \fn bool QSet::operator!=(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::operator!=(const QSet<T> &other) const
Returns \c true if the \a other set is not equal to this set; otherwise
returns \c false.
@@ -147,7 +147,7 @@
*/
/*!
- \fn int QSet::size() const
+ \fn template <class T> int QSet<T>::size() const
Returns the number of items in the set.
@@ -155,7 +155,7 @@
*/
/*!
- \fn bool QSet::isEmpty() const
+ \fn template <class T> bool QSet<T>::isEmpty() const
Returns \c true if the set contains no elements; otherwise returns
false.
@@ -164,7 +164,7 @@
*/
/*!
- \fn int QSet::capacity() const
+ \fn template <class T> int QSet<T>::capacity() const
Returns the number of buckets in the set's internal hash
table.
@@ -177,7 +177,7 @@
\sa reserve(), squeeze()
*/
-/*! \fn void QSet::reserve(int size)
+/*! \fn template <class T> void QSet<T>::reserve(int size)
Ensures that the set's internal hash table consists of at
least \a size buckets.
@@ -201,7 +201,7 @@
*/
/*!
- \fn void QSet::squeeze()
+ \fn template <class T> void QSet<T>::squeeze()
Reduces the size of the set's internal hash table to save
memory.
@@ -214,7 +214,7 @@
*/
/*!
- \fn void QSet::detach()
+ \fn template <class T> void QSet<T>::detach()
\internal
@@ -224,7 +224,7 @@
\sa isDetached()
*/
-/*! \fn bool QSet::isDetached() const
+/*! \fn template <class T> bool QSet<T>::isDetached() const
\internal
@@ -235,12 +235,12 @@
*/
/*!
- \fn void QSet::setSharable(bool sharable)
+ \fn template <class T> void QSet<T>::setSharable(bool sharable)
\internal
*/
/*!
- \fn void QSet::clear()
+ \fn template <class T> void QSet<T>::clear()
Removes all elements from the set.
@@ -248,7 +248,7 @@
*/
/*!
- \fn bool QSet::remove(const T &value)
+ \fn template <class T> bool QSet<T>::remove(const T &value)
Removes any occurrence of item \a value from the set. Returns
true if an item was actually removed; otherwise returns \c false.
@@ -257,7 +257,7 @@
*/
/*!
- \fn QSet::iterator QSet::erase(const_iterator pos)
+ \fn template <class T> QSet<T>::iterator QSet<T>::erase(const_iterator pos)
\since 5.7
Removes the item at the iterator position \a pos from the set, and
@@ -271,12 +271,12 @@
*/
/*!
- \fn QSet::iterator QSet::erase(iterator pos)
+ \fn template <class T> QSet<T>::iterator QSet<T>::erase(iterator pos)
\since 4.2
\overload
*/
-/*! \fn QSet::const_iterator QSet::find(const T &value) const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::find(const T &value) const
\since 4.2
Returns a const iterator positioned at the item \a value in the
@@ -286,7 +286,7 @@
\sa constFind(), contains()
*/
-/*! \fn QSet::iterator QSet::find(const T &value)
+/*! \fn template <class T> QSet<T>::iterator QSet<T>::find(const T &value)
\since 4.2
\overload
@@ -295,7 +295,7 @@
returns end().
*/
-/*! \fn QSet::const_iterator QSet::constFind(const T &value) const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::constFind(const T &value) const
\since 4.2
Returns a const iterator positioned at the item \a value in the
@@ -306,7 +306,7 @@
*/
/*!
- \fn bool QSet::contains(const T &value) const
+ \fn template <class T> bool QSet<T>::contains(const T &value) const
Returns \c true if the set contains item \a value; otherwise returns
false.
@@ -315,7 +315,7 @@
*/
/*!
- \fn bool QSet::contains(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::contains(const QSet<T> &other) const
\since 4.6
Returns \c true if the set contains all items from the \a other set;
@@ -324,7 +324,7 @@
\sa insert(), remove(), find()
*/
-/*! \fn QSet::const_iterator QSet::begin() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::begin() const
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the first
item in the set.
@@ -332,7 +332,7 @@
\sa constBegin(), end()
*/
-/*! \fn QSet::iterator QSet::begin()
+/*! \fn template <class T> QSet<T>::iterator QSet<T>::begin()
\since 4.2
\overload
@@ -340,7 +340,7 @@
item in the set.
*/
-/*! \fn QSet::const_iterator QSet::cbegin() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the first
@@ -349,7 +349,7 @@
\sa begin(), cend()
*/
-/*! \fn QSet::const_iterator QSet::constBegin() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the first
item in the set.
@@ -357,7 +357,7 @@
\sa begin(), constEnd()
*/
-/*! \fn QSet::const_iterator QSet::end() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::end() const
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the imaginary
item after the last item in the set.
@@ -365,7 +365,7 @@
\sa constEnd(), begin()
*/
-/*! \fn QSet::iterator QSet::end()
+/*! \fn template <class T> QSet<T>::iterator QSet<T>::end()
\since 4.2
\overload
@@ -373,7 +373,7 @@
imaginary item after the last item in the set.
*/
-/*! \fn QSet::const_iterator QSet::cend() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -382,7 +382,7 @@
\sa cbegin(), end()
*/
-/*! \fn QSet::const_iterator QSet::constEnd() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the set.
@@ -390,7 +390,7 @@
\sa constBegin(), end()
*/
-/*! \fn QSet::reverse_iterator QSet::rbegin()
+/*! \fn template <class T> QSet<T>::reverse_iterator QSet<T>::rbegin()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -399,12 +399,12 @@
\sa begin(), crbegin(), rend()
*/
-/*! \fn QSet::const_reverse_iterator QSet::rbegin() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::rbegin() const
\since 5.6
\overload
*/
-/*! \fn QSet::const_reverse_iterator QSet::crbegin() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::crbegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -413,7 +413,7 @@
\sa begin(), rbegin(), rend()
*/
-/*! \fn QSet::reverse_iterator QSet::rend()
+/*! \fn template <class T> QSet<T>::reverse_iterator QSet<T>::rend()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
@@ -422,12 +422,12 @@
\sa end(), crend(), rbegin()
*/
-/*! \fn QSet::const_reverse_iterator QSet::rend() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::rend() const
\since 5.6
\overload
*/
-/*! \fn QSet::const_reverse_iterator QSet::crend() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::crend() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
@@ -530,7 +530,7 @@
*/
/*!
- \fn QSet::insert(const T &value)
+ \fn template <class T> QSet<T>::insert(const T &value)
Inserts item \a value into the set, if \a value isn't already
in the set, and returns an iterator pointing at the inserted
@@ -540,7 +540,7 @@
*/
/*!
- \fn QSet<T> &QSet::unite(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::unite(const QSet<T> &other)
Each item in the \a other set that isn't already in this set is
inserted into this set. A reference to this set is returned.
@@ -549,7 +549,7 @@
*/
/*!
- \fn QSet<T> &QSet::intersect(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::intersect(const QSet<T> &other)
Removes all items from this set that are not contained in the
\a other set. A reference to this set is returned.
@@ -558,7 +558,7 @@
*/
/*!
- \fn bool QSet::intersects(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::intersects(const QSet<T> &other) const
\since 5.6
Returns \c true if this set has at least one item in common with
@@ -568,7 +568,7 @@
*/
/*!
- \fn QSet<T> &QSet::subtract(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::subtract(const QSet<T> &other)
Removes all items from this set that are contained in the
\a other set. Returns a reference to this set.
@@ -577,22 +577,22 @@
*/
/*!
- \fn bool QSet::empty() const
+ \fn template <class T> bool QSet<T>::empty() const
Returns \c true if the set is empty. This function is provided
for STL compatibility. It is equivalent to isEmpty().
*/
/*!
- \fn bool QSet::count() const
+ \fn template <class T> bool QSet<T>::count() const
Same as size().
*/
/*!
- \fn QSet<T> &QSet::operator<<(const T &value)
- \fn QSet<T> &QSet::operator+=(const T &value)
- \fn QSet<T> &QSet::operator|=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator<<(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator+=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator|=(const T &value)
Inserts a new item \a value and returns a reference to the set.
If \a value already exists in the set, the set is left unchanged.
@@ -601,7 +601,7 @@
*/
/*!
- \fn QSet<T> &QSet::operator-=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator-=(const T &value)
Removes the occurrence of item \a value from the set, if
it is found, and returns a reference to the set. If the
@@ -611,8 +611,8 @@
*/
/*!
- \fn QSet<T> &QSet::operator|=(const QSet<T> &other)
- \fn QSet<T> &QSet::operator+=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator|=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator+=(const QSet<T> &other)
Same as unite(\a other).
@@ -620,7 +620,7 @@
*/
/*!
- \fn QSet<T> &QSet::operator&=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator&=(const QSet<T> &other)
Same as intersect(\a other).
@@ -628,7 +628,7 @@
*/
/*!
- \fn QSet<T> &QSet::operator&=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator&=(const T &value)
\overload
@@ -638,7 +638,7 @@
/*!
- \fn QSet<T> &QSet::operator-=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator-=(const QSet<T> &other)
Same as subtract(\a{other}).
@@ -646,8 +646,8 @@
*/
/*!
- \fn QSet<T> QSet::operator|(const QSet<T> &other) const
- \fn QSet<T> QSet::operator+(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator|(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator+(const QSet<T> &other) const
Returns a new QSet that is the union of this set and the
\a other set.
@@ -656,7 +656,7 @@
*/
/*!
- \fn QSet<T> QSet::operator&(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator&(const QSet<T> &other) const
Returns a new QSet that is the intersection of this set and the
\a other set.
@@ -665,7 +665,7 @@
*/
/*!
- \fn QSet<T> QSet::operator-(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator-(const QSet<T> &other) const
Returns a new QSet that is the set difference of this set and
the \a other set, i.e., this set - \a other set.
@@ -766,8 +766,8 @@
*/
/*!
- \fn QSet::iterator::iterator()
- \fn QSet::const_iterator::const_iterator()
+ \fn template <class T> QSet<T>::iterator::iterator()
+ \fn template <class T> QSet<T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -779,8 +779,8 @@
*/
/*!
- \fn QSet::iterator::iterator(typename Hash::iterator i)
- \fn QSet::const_iterator::const_iterator(typename Hash::const_iterator i)
+ \fn template <class T> QSet<T>::iterator::iterator(typename Hash::iterator i)
+ \fn template <class T> QSet<T>::const_iterator::const_iterator(typename Hash::const_iterator i)
\internal
*/
@@ -822,14 +822,14 @@
*/
/*!
- \fn QSet::iterator::iterator(const iterator &other)
- \fn QSet::const_iterator::const_iterator(const const_iterator &other)
+ \fn template <class T> QSet<T>::iterator::iterator(const iterator &other)
+ \fn template <class T> QSet<T>::const_iterator::const_iterator(const const_iterator &other)
Constructs a copy of \a other.
*/
/*!
- \fn QSet::const_iterator::const_iterator(const iterator &other)
+ \fn template <class T> QSet<T>::const_iterator::const_iterator(const iterator &other)
\since 4.2
\overload
@@ -837,15 +837,15 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator=(const iterator &other)
- \fn QSet::const_iterator &QSet::const_iterator::operator=(const const_iterator &other)
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator=(const iterator &other)
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator=(const const_iterator &other)
Assigns \a other to this iterator.
*/
/*!
- \fn const T &QSet::iterator::operator*() const
- \fn const T &QSet::const_iterator::operator*() const
+ \fn template <class T> const T &QSet<T>::iterator::operator*() const
+ \fn template <class T> const T &QSet<T>::const_iterator::operator*() const
Returns a reference to the current item.
@@ -853,8 +853,8 @@
*/
/*!
- \fn const T *QSet::iterator::operator->() const
- \fn const T *QSet::const_iterator::operator->() const
+ \fn template <class T> const T *QSet<T>::iterator::operator->() const
+ \fn template <class T> const T *QSet<T>::const_iterator::operator->() const
Returns a pointer to the current item.
@@ -862,8 +862,8 @@
*/
/*!
- \fn bool QSet::iterator::operator==(const iterator &other) const
- \fn bool QSet::const_iterator::operator==(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator==(const iterator &other) const
+ \fn template <class T> bool QSet<T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -872,15 +872,15 @@
*/
/*!
- \fn bool QSet::iterator::operator==(const const_iterator &other) const
- \fn bool QSet::iterator::operator!=(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator==(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator!=(const const_iterator &other) const
\overload
*/
/*!
- \fn bool QSet::iterator::operator!=(const iterator &other) const
- \fn bool QSet::const_iterator::operator!=(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator!=(const iterator &other) const
+ \fn template <class T> bool QSet<T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -889,22 +889,22 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator++()
- \fn QSet::const_iterator &QSet::const_iterator::operator++()
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator++()
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the
next item in the set and returns an iterator to the new current
item.
- Calling this function on QSet::constEnd() leads to
+ Calling this function on QSet<T>::constEnd() leads to
undefined results.
\sa operator--()
*/
/*!
- \fn QSet::iterator QSet::iterator::operator++(int)
- \fn QSet::const_iterator QSet::const_iterator::operator++(int)
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator++(int)
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator++(int)
\overload
@@ -914,8 +914,8 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator--()
- \fn QSet::const_iterator &QSet::const_iterator::operator--()
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator--()
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding item
current and returns an iterator to the new current item.
@@ -927,8 +927,8 @@
*/
/*!
- \fn QSet::iterator QSet::iterator::operator--(int)
- \fn QSet::const_iterator QSet::const_iterator::operator--(int)
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator--(int)
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator--(int)
\overload
@@ -937,8 +937,8 @@
*/
/*!
- \fn QSet::iterator QSet::iterator::operator+(int j) const
- \fn QSet::const_iterator QSet::const_iterator::operator+(int j) const
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator+(int j) const
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -949,8 +949,8 @@
*/
/*!
- \fn QSet::iterator QSet::iterator::operator-(int j) const
- \fn QSet::const_iterator QSet::const_iterator::operator-(int j) const
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator-(int j) const
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -961,8 +961,8 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator+=(int j)
- \fn QSet::const_iterator &QSet::const_iterator::operator+=(int j)
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator+=(int j)
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -973,8 +973,8 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator-=(int j)
- \fn QSet::const_iterator &QSet::const_iterator::operator-=(int j)
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator-=(int j)
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -984,7 +984,7 @@
\sa operator+=(), operator-()
*/
-/*! \fn QList<T> QSet<T>::toList() const
+/*! \fn template <class T> QList<T> QSet<T>::toList() const
Returns a new QList containing the elements in the set. The
order of the elements in the QList is undefined.
@@ -996,7 +996,7 @@
\sa fromList(), QList::fromSet()
*/
-/*! \fn QList<T> QSet<T>::values() const
+/*! \fn template <class T> QList<T> QSet<T>::values() const
Returns a new QList containing the elements in the set. The
order of the elements in the QList is undefined.
@@ -1007,7 +1007,7 @@
*/
-/*! \fn QSet<T> QSet<T>::fromList(const QList<T> &list)
+/*! \fn template <class T> QSet<T> QSet<T>::fromList(const QList<T> &list)
Returns a new QSet object containing the data contained in \a
list. Since QSet doesn't allow duplicates, the resulting QSet
@@ -1022,7 +1022,7 @@
*/
/*!
- \fn QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
+ \fn template <class T> QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
\relates QSet
Writes the \a set to stream \a out.
@@ -1033,7 +1033,7 @@
*/
/*!
- \fn QDataStream &operator>>(QDataStream &in, QSet<T> &set)
+ \fn template <class T> QDataStream &operator>>(QDataStream &in, QSet<T> &set)
\relates QSet
Reads a set from stream \a in into \a set.
@@ -1044,7 +1044,7 @@
*/
/*!
- \fn uint qHash(const QSet<T> &key, uint seed = 0)
+ \fn template <class T> uint qHash(const QSet<T> &key, uint seed = 0)
\relates QHash
\since 5.5