Implement LWG Issues #2329 and #2332 - disallow iterators into temporary regexes and regexes into temporary strings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@201717 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -546,6 +546,13 @@ template <class ST, class SA, class Allocator, class charT, class traits>
|
||||
const basic_regex<charT, traits>& e,
|
||||
regex_constants::match_flag_type flags = regex_constants::match_default);
|
||||
|
||||
template <class ST, class SA, class Allocator, class charT, class traits>
|
||||
bool
|
||||
regex_match(const basic_string<charT, ST, SA>&& s,
|
||||
match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m,
|
||||
const basic_regex<charT, traits>& e,
|
||||
regex_constants::match_flag_type flags = regex_constants::match_default) = delete; // C++14
|
||||
|
||||
template <class charT, class traits>
|
||||
bool
|
||||
regex_match(const charT* str, const basic_regex<charT, traits>& e,
|
||||
@@ -594,6 +601,13 @@ template <class ST, class SA, class Allocator, class charT, class traits>
|
||||
const basic_regex<charT, traits>& e,
|
||||
regex_constants::match_flag_type flags = regex_constants::match_default);
|
||||
|
||||
template <class ST, class SA, class Allocator, class charT, class traits>
|
||||
bool
|
||||
regex_search(const basic_string<charT, ST, SA>&& s,
|
||||
match_results<typename basic_string<charT, ST, SA>::const_iterator, Allocator>& m,
|
||||
const basic_regex<charT, traits>& e,
|
||||
regex_constants::match_flag_type flags = regex_constants::match_default) = delete; // C++14
|
||||
|
||||
template <class OutputIterator, class BidirectionalIterator,
|
||||
class traits, class charT, class ST, class SA>
|
||||
OutputIterator
|
||||
@@ -655,6 +669,10 @@ public:
|
||||
regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type& re,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
||||
regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type&& __re,
|
||||
regex_constants::match_flag_type __m
|
||||
= regex_constants::match_default) = delete; // C++14
|
||||
regex_iterator(const regex_iterator&);
|
||||
regex_iterator& operator=(const regex_iterator&);
|
||||
|
||||
@@ -690,16 +708,29 @@ public:
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type& re, int submatch = 0,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type&& re, int submatch = 0,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default) = delete; // C++14
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type& re, const vector<int>& submatches,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type&& re, const vector<int>& submatches,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default) = delete; // C++14
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type& re, initializer_list<int> submatches,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type&& re, initializer_list<int> submatches,
|
||||
regex_constants::match_flag_type m = regex_constants::match_default) = delete; // C++14
|
||||
template <size_t N>
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type& re, const int (&submatches)[N],
|
||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
||||
template <size_t N>
|
||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
const regex_type& re, const int (&submatches)[N],
|
||||
regex_constants::match_flag_type m = regex_constants::match_default) = delete // C++14;
|
||||
regex_token_iterator(const regex_token_iterator&);
|
||||
regex_token_iterator& operator=(const regex_token_iterator&);
|
||||
|
||||
@@ -5943,6 +5974,15 @@ regex_search(const basic_string<_CharT, _ST, _SA>& __s,
|
||||
return __r;
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
template <class _ST, class _SA, class _Ap, class _Cp, class _Tp>
|
||||
bool
|
||||
regex_search(const basic_string<_Cp, _ST, _SA>&& __s,
|
||||
match_results<typename basic_string<_Cp, _ST, _SA>::const_iterator, _Ap>&,
|
||||
const basic_regex<_Cp, _Tp>& __e,
|
||||
regex_constants::match_flag_type __flags = regex_constants::match_default) = delete;
|
||||
#endif
|
||||
|
||||
// regex_match
|
||||
|
||||
template <class _BidirectionalIterator, class _Allocator, class _CharT, class _Traits>
|
||||
@@ -5995,6 +6035,16 @@ regex_match(const basic_string<_CharT, _ST, _SA>& __s,
|
||||
return _VSTD::regex_match(__s.begin(), __s.end(), __m, __e, __flags);
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
template <class _ST, class _SA, class _Allocator, class _CharT, class _Traits>
|
||||
inline _LIBCPP_INLINE_VISIBILITY
|
||||
bool
|
||||
regex_match(const basic_string<_CharT, _ST, _SA>&& __s,
|
||||
match_results<typename basic_string<_CharT, _ST, _SA>::const_iterator, _Allocator>& __m,
|
||||
const basic_regex<_CharT, _Traits>& __e,
|
||||
regex_constants::match_flag_type __flags = regex_constants::match_default) = delete;
|
||||
#endif
|
||||
|
||||
template <class _CharT, class _Traits>
|
||||
inline _LIBCPP_INLINE_VISIBILITY
|
||||
bool
|
||||
@@ -6040,7 +6090,14 @@ public:
|
||||
regex_iterator();
|
||||
regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type& __re,
|
||||
regex_constants::match_flag_type __m = regex_constants::match_default);
|
||||
regex_constants::match_flag_type __m
|
||||
= regex_constants::match_default);
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type&& __re,
|
||||
regex_constants::match_flag_type __m
|
||||
= regex_constants::match_default) = delete;
|
||||
#endif
|
||||
|
||||
bool operator==(const regex_iterator& __x) const;
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
@@ -6156,16 +6213,38 @@ public:
|
||||
const regex_type& __re, int __submatch = 0,
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default);
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type&& __re, int __submatch = 0,
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default) = delete;
|
||||
#endif
|
||||
|
||||
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type& __re, const vector<int>& __submatches,
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default);
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type&& __re, const vector<int>& __submatches,
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default) = delete;
|
||||
#endif
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type& __re,
|
||||
initializer_list<int> __submatches,
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default);
|
||||
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||
const regex_type&& __re,
|
||||
initializer_list<int> __submatches,
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default) = delete;
|
||||
#endif
|
||||
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||
template <size_t _Np>
|
||||
regex_token_iterator(_BidirectionalIterator __a,
|
||||
@@ -6174,6 +6253,16 @@ public:
|
||||
const int (&__submatches)[_Np],
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default);
|
||||
#if _LIBCPP_STD_VER > 11
|
||||
template <std::size_t _Np>
|
||||
regex_token_iterator(_BidirectionalIterator __a,
|
||||
_BidirectionalIterator __b,
|
||||
const regex_type&& __re,
|
||||
const int (&__submatches)[_Np],
|
||||
regex_constants::match_flag_type __m =
|
||||
regex_constants::match_default) = delete;
|
||||
#endif
|
||||
|
||||
regex_token_iterator(const regex_token_iterator&);
|
||||
regex_token_iterator& operator=(const regex_token_iterator&);
|
||||
|
||||
|
Reference in New Issue
Block a user