@@ -232,10 +232,22 @@ std::size_t read_until(SyncReadStream& s,
232232#if !defined(BOOST_ASIO_NO_EXTENSIONS)
233233#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
234234
235- template <typename SyncReadStream, typename DynamicBuffer_v1>
236- inline std::size_t read_until (SyncReadStream& s,
237- DynamicBuffer_v1&& buffers,
238- const boost::regex& expr,
235+ namespace detail {
236+
237+ struct regex_match_flags
238+ {
239+ template <typename T>
240+ operator T () const
241+ {
242+ return T::match_default | T::match_partial;
243+ }
244+ };
245+
246+ } // namespace detail
247+
248+ template <typename SyncReadStream, typename DynamicBuffer_v1, typename Traits>
249+ inline std::size_t read_until (SyncReadStream& s, DynamicBuffer_v1&& buffers,
250+ const boost::basic_regex<char , Traits>& expr,
239251 constraint_t <
240252 is_dynamic_buffer_v1<decay_t <DynamicBuffer_v1>>::value
241253 >,
@@ -250,10 +262,9 @@ inline std::size_t read_until(SyncReadStream& s,
250262 return bytes_transferred;
251263}
252264
253- template <typename SyncReadStream, typename DynamicBuffer_v1>
254- std::size_t read_until (SyncReadStream& s,
255- DynamicBuffer_v1&& buffers,
256- const boost::regex& expr, boost::system::error_code& ec,
265+ template <typename SyncReadStream, typename DynamicBuffer_v1, typename Traits>
266+ std::size_t read_until (SyncReadStream& s, DynamicBuffer_v1&& buffers,
267+ const boost::basic_regex<char , Traits>& expr, boost::system::error_code& ec,
257268 constraint_t <
258269 is_dynamic_buffer_v1<decay_t <DynamicBuffer_v1>>::value
259270 >,
@@ -279,8 +290,8 @@ std::size_t read_until(SyncReadStream& s,
279290 boost::match_results<iterator,
280291 typename std::vector<boost::sub_match<iterator>>::allocator_type>
281292 match_results;
282- if (regex_search (start_pos, end, match_results, expr,
283- boost::match_default | boost::match_partial ))
293+ if (regex_search (start_pos, end, match_results,
294+ expr, detail::regex_match_flags () ))
284295 {
285296 if (match_results[0 ].matched )
286297 {
@@ -442,16 +453,18 @@ inline std::size_t read_until(SyncReadStream& s,
442453
443454#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
444455
445- template <typename SyncReadStream, typename Allocator>
456+ template <typename SyncReadStream, typename Allocator, typename Traits >
446457inline std::size_t read_until (SyncReadStream& s,
447- boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr)
458+ boost::asio::basic_streambuf<Allocator>& b,
459+ const boost::basic_regex<char , Traits>& expr)
448460{
449461 return read_until (s, basic_streambuf_ref<Allocator>(b), expr);
450462}
451463
452- template <typename SyncReadStream, typename Allocator>
464+ template <typename SyncReadStream, typename Allocator, typename Traits >
453465inline std::size_t read_until (SyncReadStream& s,
454- boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
466+ boost::asio::basic_streambuf<Allocator>& b,
467+ const boost::basic_regex<char , Traits>& expr,
455468 boost::system::error_code& ec)
456469{
457470 return read_until (s, basic_streambuf_ref<Allocator>(b), expr, ec);
@@ -630,9 +643,9 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
630643#if !defined(BOOST_ASIO_NO_EXTENSIONS)
631644#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
632645
633- template <typename SyncReadStream, typename DynamicBuffer_v2>
634- inline std::size_t read_until (SyncReadStream& s,
635- DynamicBuffer_v2 buffers, const boost::regex & expr,
646+ template <typename SyncReadStream, typename DynamicBuffer_v2, typename Traits >
647+ inline std::size_t read_until (SyncReadStream& s, DynamicBuffer_v2 buffers,
648+ const boost::basic_regex< char , Traits> & expr,
636649 constraint_t <
637650 is_dynamic_buffer_v2<DynamicBuffer_v2>::value
638651 >)
@@ -644,9 +657,9 @@ inline std::size_t read_until(SyncReadStream& s,
644657 return bytes_transferred;
645658}
646659
647- template <typename SyncReadStream, typename DynamicBuffer_v2>
660+ template <typename SyncReadStream, typename DynamicBuffer_v2, typename Traits >
648661std::size_t read_until (SyncReadStream& s, DynamicBuffer_v2 buffers,
649- const boost::regex & expr, boost::system::error_code& ec,
662+ const boost::basic_regex< char , Traits> & expr, boost::system::error_code& ec,
650663 constraint_t <
651664 is_dynamic_buffer_v2<DynamicBuffer_v2>::value
652665 >)
@@ -669,8 +682,8 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
669682 boost::match_results<iterator,
670683 typename std::vector<boost::sub_match<iterator>>::allocator_type>
671684 match_results;
672- if (regex_search (start_pos, end, match_results, expr,
673- boost::match_default | boost::match_partial ))
685+ if (regex_search (start_pos, end, match_results,
686+ expr, detail::regex_match_flags () ))
674687 {
675688 if (match_results[0 ].matched )
676689 {
@@ -1304,10 +1317,9 @@ namespace detail
13041317 : public base_from_cancellation_state<ReadHandler>
13051318 {
13061319 public:
1307- template <typename BufferSequence>
1308- read_until_expr_op_v1 (AsyncReadStream& stream,
1309- BufferSequence&& buffers,
1310- const boost::regex& expr, ReadHandler& handler)
1320+ template <typename BufferSequence, typename Traits>
1321+ read_until_expr_op_v1 (AsyncReadStream& stream, BufferSequence&& buffers,
1322+ const boost::basic_regex<char , Traits>& expr, ReadHandler& handler)
13111323 : base_from_cancellation_state<ReadHandler>(
13121324 handler, enable_partial_cancellation()),
13131325 stream_ (stream),
@@ -1366,8 +1378,8 @@ namespace detail
13661378 boost::match_results<iterator,
13671379 typename std::vector<boost::sub_match<iterator>>::allocator_type>
13681380 match_results;
1369- bool match = regex_search (start_pos, end, match_results, expr_,
1370- boost::match_default | boost::match_partial );
1381+ bool match = regex_search (start_pos, end,
1382+ match_results, expr_, regex_match_flags () );
13711383 if (match && match_results[0 ].matched )
13721384 {
13731385 // Full match. We're done.
@@ -1526,11 +1538,11 @@ struct associator<Associator,
15261538
15271539#endif // !defined(GENERATING_DOCUMENTATION)
15281540
1529- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1541+ template <typename AsyncReadStream, typename DynamicBuffer_v1, typename Traits,
15301542 BOOST_ASIO_COMPLETION_TOKEN_FOR (void (boost::system::error_code,
15311543 std::size_t )) ReadToken>
15321544inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1533- const boost::regex & expr, ReadToken&& token,
1545+ const boost::basic_regex< char , Traits> & expr, ReadToken&& token,
15341546 constraint_t <
15351547 is_dynamic_buffer_v1<decay_t <DynamicBuffer_v1>>::value
15361548 >,
@@ -1850,12 +1862,12 @@ inline auto async_read_until(AsyncReadStream& s,
18501862
18511863#if defined(BOOST_ASIO_HAS_BOOST_REGEX)
18521864
1853- template <typename AsyncReadStream, typename Allocator,
1865+ template <typename AsyncReadStream, typename Allocator, typename Traits,
18541866 BOOST_ASIO_COMPLETION_TOKEN_FOR (void (boost::system::error_code,
18551867 std::size_t )) ReadToken>
18561868inline auto async_read_until(AsyncReadStream& s,
18571869 boost::asio::basic_streambuf<Allocator>& b,
1858- const boost::regex & expr, ReadToken&& token)
1870+ const boost::basic_regex< char , Traits> & expr, ReadToken&& token)
18591871 -> decltype(
18601872 async_initiate<ReadToken,
18611873 void (boost::system::error_code, std::size_t )>(
@@ -2408,10 +2420,9 @@ namespace detail
24082420 : public base_from_cancellation_state<ReadHandler>
24092421 {
24102422 public:
2411- template <typename BufferSequence>
2412- read_until_expr_op_v2 (AsyncReadStream& stream,
2413- BufferSequence&& buffers,
2414- const boost::regex& expr, ReadHandler& handler)
2423+ template <typename BufferSequence, typename Traits>
2424+ read_until_expr_op_v2 (AsyncReadStream& stream, BufferSequence&& buffers,
2425+ const boost::basic_regex<char , Traits>& expr, ReadHandler& handler)
24152426 : base_from_cancellation_state<ReadHandler>(
24162427 handler, enable_partial_cancellation()),
24172428 stream_ (stream),
@@ -2475,8 +2486,8 @@ namespace detail
24752486 boost::match_results<iterator,
24762487 typename std::vector<boost::sub_match<iterator>>::allocator_type>
24772488 match_results;
2478- bool match = regex_search (start_pos, end, match_results, expr_,
2479- boost::match_default | boost::match_partial );
2489+ bool match = regex_search (start_pos, end,
2490+ match_results, expr_, regex_match_flags () );
24802491 if (match && match_results[0 ].matched )
24812492 {
24822493 // Full match. We're done.
@@ -2639,11 +2650,11 @@ struct associator<Associator,
26392650
26402651#endif // !defined(GENERATING_DOCUMENTATION)
26412652
2642- template <typename AsyncReadStream, typename DynamicBuffer_v2,
2653+ template <typename AsyncReadStream, typename DynamicBuffer_v2, typename Traits,
26432654 BOOST_ASIO_COMPLETION_TOKEN_FOR (void (boost::system::error_code,
26442655 std::size_t )) ReadToken>
26452656inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
2646- const boost::regex & expr, ReadToken&& token,
2657+ const boost::basic_regex< char , Traits> & expr, ReadToken&& token,
26472658 constraint_t <
26482659 is_dynamic_buffer_v2<DynamicBuffer_v2>::value
26492660 >)
0 commit comments