| 123456789101112131415161718192021222324252627 |
- #pragma once
- namespace iterator { namespace detail {
- struct terminal_layer_tag_t;
- struct continue_layer_tag_t;
- template <typename> struct void_t { using type = void; };
- template <typename IterType>
- using value_iterator = decltype(std::begin(*std::declval<IterType>()));
- template <typename IterType>
- using mapped_iterator =
- decltype(std::begin(std::declval<IterType>()->second));
- /**
- * @class next_layer_type
- * @breif A template metaprogramming type for unifying associative and
- * non-associative containers.
- */
- template <typename V, typename Tag> struct next_layer_type {
- using type = std::tuple<V>;
- };
- template <typename V> struct next_layer_type<V, continue_layer_tag_t> {
- using type = V;
- };
- }}
|