|
|
@@ -19,9 +19,6 @@ namespace iterator { namespace detail {
|
|
|
|
|
|
protected:
|
|
|
using recursive_category = terminal_layer_tag_t;
|
|
|
- using reference = decltype(*std::declval<super>());
|
|
|
- using value_type = std::remove_cv_t<std::remove_reference_t<reference>>;
|
|
|
- using pointer = decltype(std::declval<super>().operator->());
|
|
|
|
|
|
public:
|
|
|
using super::super;
|
|
|
@@ -58,19 +55,12 @@ namespace iterator { namespace detail {
|
|
|
protected:
|
|
|
using recursive_category = continue_layer_tag_t;
|
|
|
|
|
|
- public:
|
|
|
- using value_type = std::tuple<first_type, second_type>;
|
|
|
- using reference = std::tuple<first_type &, second_type &>;
|
|
|
-
|
|
|
public:
|
|
|
using super::super;
|
|
|
recursive_iterator_base(super const & iter) : super(iter) {}
|
|
|
recursive_iterator_base(super && iter) : super(std::move(iter)) {}
|
|
|
recursive_iterator_base() = default;
|
|
|
|
|
|
- // TODO: Get rid of this again
|
|
|
- reference operator*() const { return get(); }
|
|
|
-
|
|
|
protected:
|
|
|
/**
|
|
|
* An alternative function to operator*(), which allows single layer
|
|
|
@@ -78,7 +68,7 @@ namespace iterator { namespace detail {
|
|
|
* underlying value/reference type, and nested containers to propogate
|
|
|
* a tuple or a pair as necessary.
|
|
|
*/
|
|
|
- reference get() const {
|
|
|
+ std::tuple<first_type &, second_type &> get() const {
|
|
|
auto & pair = super::operator*();
|
|
|
return std::tie(pair.first, pair.second);
|
|
|
}
|