diff --git a/octa/string.h b/octa/string.h index 6bad1e9..5dc361d 100644 --- a/octa/string.h +++ b/octa/string.h @@ -23,8 +23,6 @@ struct StringRangeBase: InputRange< StringRangeBase, FiniteRandomAccessRangeTag, T > { StringRangeBase(): p_beg(nullptr), p_end(nullptr) {} - StringRangeBase(const StringRangeBase &v): p_beg(v.p_beg), - p_end(v.p_end) {} StringRangeBase(T *beg, T *end): p_beg(beg), p_end(end) {} StringRangeBase(T *beg, octa::Size n): p_beg(beg), p_end(beg + n) {} /* TODO: traits for utf-16/utf-32 string lengths, for now assume char */ @@ -32,6 +30,11 @@ struct StringRangeBase: InputRange< StringRangeBase(const StringBase &s): p_beg(s.data()), p_end(s.data() + s.size()) {} + template + StringRangeBase(const StringRangeBase &v, octa::EnableIf< + octa::IsConvertible::value, bool + > = true): p_beg(&v[0]), p_end(&v[v.size()]) {} + StringRangeBase &operator=(const StringRangeBase &v) { p_beg = v.p_beg; p_end = v.p_end; return *this; }