From b82e9b016f16f3a85ca33c5ea6896266c3cc662a Mon Sep 17 00:00:00 2001 From: Daniel Kruegler Date: Fri, 14 Nov 2014 04:23:06 +0000 Subject: regex.h: Support embedded zeros in sub_match comparisons (DR 2217) 2014-11-13 Daniel Kruegler * include/bits/regex.h: Support embedded zeros in sub_match comparisons (DR 2217) * testsuite/28_regex/sub_match/embedded_zeros_cmp.cc: Add test cases for embedded zeros From-SVN: r217535 --- libstdc++-v3/include/bits/regex.h | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'libstdc++-v3/include/bits/regex.h') diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 30189e3..6ff9a82 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -1006,7 +1006,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline bool operator==(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs) - { return __rhs.compare(__lhs.c_str()) == 0; } + { + typedef typename sub_match<_Bi_iter>::string_type string_type; + return __rhs.compare(string_type(__lhs.data(), __lhs.size())) == 0; + } /** * @brief Tests the inequivalence of a string and a regular expression @@ -1031,7 +1034,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline bool operator<(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs, const sub_match<_Bi_iter>& __rhs) - { return __rhs.compare(__lhs.c_str()) > 0; } + { + typedef typename sub_match<_Bi_iter>::string_type string_type; + return __rhs.compare(string_type(__lhs.data(), __lhs.size())) > 0; + } /** * @brief Tests the ordering of a string and a regular expression submatch. @@ -1080,7 +1086,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline bool operator==(const sub_match<_Bi_iter>& __lhs, const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs) - { return __lhs.compare(__rhs.c_str()) == 0; } + { + typedef typename sub_match<_Bi_iter>::string_type string_type; + return __lhs.compare(string_type(__rhs.data(), __rhs.size())) == 0; + } /** * @brief Tests the inequivalence of a regular expression submatch and a @@ -1105,7 +1114,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline bool operator<(const sub_match<_Bi_iter>& __lhs, const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs) - { return __lhs.compare(__rhs.c_str()) < 0; } + { + typedef typename sub_match<_Bi_iter>::string_type string_type; + return __lhs.compare(string_type(__rhs.data(), __rhs.size())) < 0; + } /** * @brief Tests the ordering of a regular expression submatch and a string. -- cgit v1.1