diff --git a/include/boost/parser/replace.hpp b/include/boost/parser/replace.hpp index 2db07a89..d7f588eb 100644 --- a/include/boost/parser/replace.hpp +++ b/include/boost/parser/replace.hpp @@ -699,8 +699,8 @@ constexpr bool std::ranges::enable_borrowed_range> = - enable_borrowed_range && enable_borrowed_range; + SkipParser>> = std::ranges::enable_borrowed_range && + std::ranges::enable_borrowed_range; #endif #endif diff --git a/include/boost/parser/search.hpp b/include/boost/parser/search.hpp index 3df2a567..aab10373 100644 --- a/include/boost/parser/search.hpp +++ b/include/boost/parser/search.hpp @@ -667,7 +667,7 @@ template< constexpr bool std::ranges::enable_borrowed_range< boost::parser:: search_all_view> = - enable_borrowed_range; + std::ranges::enable_borrowed_range; #endif #endif diff --git a/include/boost/parser/split.hpp b/include/boost/parser/split.hpp index 31a5ce72..205858cc 100644 --- a/include/boost/parser/split.hpp +++ b/include/boost/parser/split.hpp @@ -393,7 +393,7 @@ template< constexpr bool std::ranges::enable_borrowed_range< boost::parser:: split_view> = - enable_borrowed_range; + std::ranges::enable_borrowed_range; #endif #endif diff --git a/include/boost/parser/transform_replace.hpp b/include/boost/parser/transform_replace.hpp index e4b6b616..c271f71a 100644 --- a/include/boost/parser/transform_replace.hpp +++ b/include/boost/parser/transform_replace.hpp @@ -10,6 +10,10 @@ namespace boost::parser { namespace detail { + template + constexpr bool tidy_func = std::is_trivially_copyable_v && + sizeof(F) <= sizeof(void *) * 2; + template using attr_type = decltype(std::declval().call( std::bool_constant{}, @@ -342,7 +346,7 @@ namespace boost::parser { ErrorHandler, SkipParser>> { - //private: + private: using attr_t = detail::range_attr_t; using replacement_range = std::invoke_result_t; @@ -813,8 +817,7 @@ namespace boost::parser { #endif } -// TODO: Conditional borrowability. -#if 0 // BOOST_PARSER_USE_CONCEPTS +#if BOOST_PARSER_USE_CONCEPTS template< typename V, typename F, @@ -822,14 +825,16 @@ template< typename GlobalState, typename ErrorHandler, typename SkipParser> -constexpr bool std::ranges::enable_borrowed_range> = - enable_borrowed_range && enable_borrowed_range; +constexpr bool + std::ranges::enable_borrowed_range> = std::ranges::enable_borrowed_range && + (std::ranges::enable_borrowed_range || + boost::parser::detail::tidy_func); #endif #endif