[array] Adjust hb_sorted_array_t copy constructor/assignment to match hb_array_t
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 26 Apr 2019 20:03:41 +0000 (13:03 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 26 Apr 2019 20:04:06 +0000 (13:04 -0700)
src/hb-array.hh

index 7a781be..b4619ee 100644 (file)
@@ -211,12 +211,19 @@ struct hb_sorted_array_t :
   static constexpr bool is_sorted_iterator = true;
 
   hb_sorted_array_t () : hb_array_t<Type> () {}
-  hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
-  template <typename U = Type, hb_enable_if (hb_is_const (U))>
-  hb_sorted_array_t (const hb_sorted_array_t<hb_remove_const<Type> > &o) : hb_array_t<Type> (o) {}
   hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
   template <unsigned int length_> hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}
 
+  template <typename U,
+           hb_enable_if (hb_is_cr_convertible_to(U, Type))>
+  hb_sorted_array_t (const hb_array_t<U> &o) :
+    hb_iter_t<hb_sorted_array_t<Type>, Type&> (),
+    hb_array_t<Type> (o) {}
+  template <typename U,
+           hb_enable_if (hb_is_cr_convertible_to(U, Type))>
+  hb_sorted_array_t& operator = (const hb_array_t<U> &o)
+  { hb_array_t<Type> (*this) = o; return *this; }
+
   hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const
   { return hb_sorted_array_t<Type> (((const hb_array_t<Type> *) (this))->sub_array (start_offset, seg_count)); }
   hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const