diff --git a/octa/range.h b/octa/range.h index 64c3715..164eef3 100644 --- a/octa/range.h +++ b/octa/range.h @@ -12,11 +12,11 @@ #include "octa/utility.h" namespace octa { - struct InputRange {}; - struct OutputRange {}; - struct ForwardRange {}; - struct BidirectionalRange {}; - struct RandomAccessRange {}; + struct InputRangeTag {}; + struct OutputRangeTag {}; + struct ForwardRangeTag {}; + struct BidirectionalRangeTag {}; + struct RandomAccessRangeTag {}; template struct RangeTraits { @@ -47,7 +47,7 @@ namespace octa { template struct InputRangeBase { + > struct InputRange { typedef C range_category; typedef S size_type; typedef V value_type; @@ -62,15 +62,15 @@ namespace octa { }; template - struct OutputRangeBase { - typedef OutputRange range_category; + struct OutputRange { + typedef OutputRangeTag range_category; typedef S size_type; typedef V value_type; typedef R reference; }; template - struct ReverseRange: InputRangeBase, + struct ReverseRange: InputRange, typename RangeTraits::range_category, typename RangeTraits::value_type, typename RangeTraits::reference, @@ -145,7 +145,7 @@ namespace octa { } template - struct MoveRange: InputRangeBase, + struct MoveRange: InputRange, typename RangeTraits::range_category, typename RangeTraits::value_type, typename RangeTraits::value_type &&, @@ -215,7 +215,7 @@ namespace octa { } template - struct NumberRange: InputRangeBase, ForwardRange, T> { + struct NumberRange: InputRange, ForwardRangeTag, T> { NumberRange(): p_a(0), p_b(0), p_step(0) {} NumberRange(const NumberRange &it): p_a(it.p_a), p_b(it.p_b), p_step(it.p_step) {} @@ -248,7 +248,7 @@ namespace octa { } template - struct PointerRange: InputRangeBase, RandomAccessRange, T> { + struct PointerRange: InputRange, RandomAccessRangeTag, T> { PointerRange(): p_beg(nullptr), p_end(nullptr) {} PointerRange(const PointerRange &v): p_beg(v.p_beg), p_end(v.p_end) {} PointerRange(T *beg, T *end): p_beg(beg), p_end(end) {} @@ -305,8 +305,8 @@ namespace octa { }; template - struct EnumeratedRange: InputRangeBase, - InputRange, typename RangeTraits::value_type, + struct EnumeratedRange: InputRange, + InputRangeTag, typename RangeTraits::value_type, EnumeratedValue::reference, typename RangeTraits::size_type>, typename RangeTraits::size_type