[iter] Make hb_is_iterator_of() check is_convertible
Instead of is_cr_convertible.
This commit is contained in:
parent
70a49f2e4a
commit
726002a6a6
|
@ -47,12 +47,12 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
|
||||||
template <unsigned int length_> hb_array_t (Type (&array_)[length_]) : arrayZ (array_), length (length_) {}
|
template <unsigned int length_> hb_array_t (Type (&array_)[length_]) : arrayZ (array_), length (length_) {}
|
||||||
|
|
||||||
template <typename U,
|
template <typename U,
|
||||||
hb_enable_if (hb_is_cr_convertible_to(U, Type))>
|
hb_enable_if (hb_is_cr_convertible(U, Type))>
|
||||||
hb_array_t (const hb_array_t<U> &o) :
|
hb_array_t (const hb_array_t<U> &o) :
|
||||||
hb_iter_with_fallback_t<hb_array_t<Type>, Type&> (),
|
hb_iter_with_fallback_t<hb_array_t<Type>, Type&> (),
|
||||||
arrayZ (o.arrayZ), length (o.length) {}
|
arrayZ (o.arrayZ), length (o.length) {}
|
||||||
template <typename U,
|
template <typename U,
|
||||||
hb_enable_if (hb_is_cr_convertible_to(U, Type))>
|
hb_enable_if (hb_is_cr_convertible(U, Type))>
|
||||||
hb_array_t& operator = (const hb_array_t<U> &o)
|
hb_array_t& operator = (const hb_array_t<U> &o)
|
||||||
{ arrayZ = o.arrayZ; length = o.length; return *this; }
|
{ arrayZ = o.arrayZ; length = o.length; return *this; }
|
||||||
|
|
||||||
|
@ -228,12 +228,12 @@ struct hb_sorted_array_t :
|
||||||
template <unsigned int length_> hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}
|
template <unsigned int length_> hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}
|
||||||
|
|
||||||
template <typename U,
|
template <typename U,
|
||||||
hb_enable_if (hb_is_cr_convertible_to(U, Type))>
|
hb_enable_if (hb_is_cr_convertible(U, Type))>
|
||||||
hb_sorted_array_t (const hb_array_t<U> &o) :
|
hb_sorted_array_t (const hb_array_t<U> &o) :
|
||||||
hb_iter_t<hb_sorted_array_t<Type>, Type&> (),
|
hb_iter_t<hb_sorted_array_t<Type>, Type&> (),
|
||||||
hb_array_t<Type> (o) {}
|
hb_array_t<Type> (o) {}
|
||||||
template <typename U,
|
template <typename U,
|
||||||
hb_enable_if (hb_is_cr_convertible_to(U, Type))>
|
hb_enable_if (hb_is_cr_convertible(U, Type))>
|
||||||
hb_sorted_array_t& operator = (const hb_array_t<U> &o)
|
hb_sorted_array_t& operator = (const hb_array_t<U> &o)
|
||||||
{ hb_array_t<Type> (*this) = o; return *this; }
|
{ hb_array_t<Type> (*this) = o; return *this; }
|
||||||
|
|
||||||
|
|
|
@ -266,7 +266,7 @@ static inline char _hb_is_iterator_of (hb_priority<0>, const void *) { return 0;
|
||||||
template <typename Iter,
|
template <typename Iter,
|
||||||
typename Item,
|
typename Item,
|
||||||
typename Item2 = typename Iter::item_t,
|
typename Item2 = typename Iter::item_t,
|
||||||
hb_enable_if (hb_is_cr_convertible_to (Item2, Item))>
|
hb_enable_if (hb_is_convertible (Item2, Item))>
|
||||||
static inline int _hb_is_iterator_of (hb_priority<2>, hb_iter_t<Iter, Item2> *) { return 0; }
|
static inline int _hb_is_iterator_of (hb_priority<2>, hb_iter_t<Iter, Item2> *) { return 0; }
|
||||||
|
|
||||||
template<typename Iter, typename Item>
|
template<typename Iter, typename Item>
|
||||||
|
|
|
@ -116,10 +116,10 @@ template <typename T> using hb_remove_pointer = typename hb_match_pointer<T>::ty
|
||||||
/* TODO Add feature-parity to std::decay. */
|
/* TODO Add feature-parity to std::decay. */
|
||||||
template <typename T> using hb_decay = hb_remove_const<hb_remove_reference<T>>;
|
template <typename T> using hb_decay = hb_remove_const<hb_remove_reference<T>>;
|
||||||
|
|
||||||
#define hb_is_cr_convertible_to(A, B) ( \
|
#define hb_is_cr_convertible(From, To) ( \
|
||||||
hb_is_same (hb_decay<A>, hb_decay<B>) && \
|
hb_is_same (hb_decay<From>, hb_decay<To>) && \
|
||||||
hb_is_const (A) <= hb_is_const (B) && \
|
hb_is_const (From) <= hb_is_const (To) && \
|
||||||
hb_is_reference (A) >= hb_is_reference (B))
|
hb_is_reference (From) >= hb_is_reference (To))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue