1515
1616namespace ctre {
1717
18- constexpr bool is_random_accessible (const std::random_access_iterator_tag &) { return true ; }
19- constexpr bool is_random_accessible (...) { return false ; }
18+ constexpr bool is_random_accessible_f (const std::random_access_iterator_tag &) { return std::true_type{} ; }
19+ // constexpr bool is_random_accessible_f (...) { return std::false_type{} ; }
2020
21- template <typename T> constexpr bool is_reverse_iterator (const std::reverse_iterator<T> &) { return true ; }
22- constexpr bool is_reverse_iterator (...) { return false ; }
21+ template <typename T> constexpr bool is_reverse_iterator_f (const std::reverse_iterator<T> &) { return std::true_type{}; }
22+ constexpr bool is_reverse_iterator_f (...) { return std::false_type{}; }
23+
24+ template <typename T> constexpr bool is_random_accessible = decltype (is_random_accessible_f(std::declval<const T &>())){};
25+ template <typename T> constexpr bool is_reverse_iterator = decltype (is_reverse_iterator_f(std::declval<const T &>())){};
2326
2427struct not_matched_tag_t { };
2528
@@ -69,7 +72,7 @@ template <size_t Id, typename Name = void> struct captured_content {
6972 }
7073
7174 template <typename It = Iterator> constexpr CTRE_FORCE_INLINE const auto * data_unsafe () const noexcept {
72- static_assert (!is_reverse_iterator (It{}) , " Iterator in your capture must not be reverse!" );
75+ static_assert (!is_reverse_iterator<It> , " Iterator in your capture must not be reverse!" );
7376
7477 #if __cpp_char8_t >= 201811
7578 if constexpr (std::is_same_v<Iterator, utf8_iterator>) {
@@ -83,7 +86,7 @@ template <size_t Id, typename Name = void> struct captured_content {
8386 }
8487
8588 template <typename It = Iterator> constexpr CTRE_FORCE_INLINE const auto * data () const noexcept {
86- constexpr bool must_be_contiguous_nonreverse_iterator = is_random_accessible (typename std::iterator_traits<It>::iterator_category{}) && !is_reverse_iterator (It{});
89+ constexpr bool must_be_contiguous_nonreverse_iterator = is_random_accessible_f (typename std::iterator_traits<It>::iterator_category{}) && !is_reverse_iterator_f (It{});
8790
8891 static_assert (must_be_contiguous_nonreverse_iterator, " To access result as a pointer you need to provide a random access iterator/range to regex (which is not reverse iterator based)." );
8992
@@ -119,7 +122,7 @@ template <size_t Id, typename Name = void> struct captured_content {
119122
120123 template <typename It = Iterator> constexpr CTRE_FORCE_INLINE auto to_view () const noexcept {
121124 // random access, because C++ (waving hands around)
122- constexpr bool must_be_nonreverse_contiguous_iterator = is_random_accessible (typename std::iterator_traits<std::remove_const_t <It>>::iterator_category{}) && !is_reverse_iterator (It{});
125+ constexpr bool must_be_nonreverse_contiguous_iterator = is_random_accessible_f (typename std::iterator_traits<std::remove_const_t <It>>::iterator_category{}) && !is_reverse_iterator_f (It{});
123126
124127 static_assert (must_be_nonreverse_contiguous_iterator, " To convert capture into a basic_string_view you need to provide a pointer or a contiguous non-reverse iterator/range to regex." );
125128
0 commit comments