|
|
@@ -236,28 +236,22 @@ namespace iterator {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
-namespace std {
|
|
|
- // In C++20, a concept/requires could be used to eschew the need for the below
|
|
|
- // macros.
|
|
|
- template <typename I> struct iterator_traits<::iterator::facade<I>> {
|
|
|
- using reference = decltype(*std::declval<I>());
|
|
|
- using value_type = std::remove_cv_t<std::remove_reference_t<reference>>;
|
|
|
- using pointer = decltype(std::declval<I>().operator->());
|
|
|
- using difference_type = ::iterator::detail::distance_to_t<I>;
|
|
|
- using iterator_category = ::iterator::detail::iterator_category_t<I>;
|
|
|
- };
|
|
|
-}
|
|
|
+// In C++20, a concept/requires could be used to eschew the need for the below
|
|
|
+// macros.
|
|
|
+template <typename I> struct std::iterator_traits<::iterator::facade<I>> {
|
|
|
+ using reference = decltype(*std::declval<I>());
|
|
|
+ using value_type = std::remove_cv_t<std::remove_reference_t<reference>>;
|
|
|
+ using pointer = decltype(std::declval<I>().operator->());
|
|
|
+ using difference_type = ::iterator::detail::distance_to_t<I>;
|
|
|
+ using iterator_category = ::iterator::detail::iterator_category_t<I>;
|
|
|
+};
|
|
|
|
|
|
#define MAKE_ITERATOR_FACADE_TYPEDEFS(type) \
|
|
|
- namespace std { \
|
|
|
- template <> \
|
|
|
- struct iterator_traits<type> \
|
|
|
- : std::iterator_traits<::iterator::facade<type>> {}; \
|
|
|
- }
|
|
|
+ template <> \
|
|
|
+ struct std::iterator_traits<type> \
|
|
|
+ : std::iterator_traits<::iterator::facade<type>> {}; \
|
|
|
|
|
|
#define MAKE_ITERATOR_FACADE_TYPEDEFS_T(type) \
|
|
|
- namespace std { \
|
|
|
- template <typename... T> \
|
|
|
- struct iterator_traits<type<T...>> \
|
|
|
- : std::iterator_traits<::iterator::facade<type<T...>>> {}; \
|
|
|
- }
|
|
|
+ template <typename... T> \
|
|
|
+ struct std::iterator_traits<type<T...>> \
|
|
|
+ : std::iterator_traits<::iterator::facade<type<T...>>> {}; \
|