forked from OSchip/llvm-project
Implement LWG Issues #2329 and #2332 - disallow iterators into temporary regexes and regexes into temporary strings
llvm-svn: 201717
This commit is contained in:
parent
0e4aa52e88
commit
7d35711187
|
@ -546,6 +546,13 @@ template <class ST, class SA, class Allocator, class charT, class traits>
|
||||||
const basic_regex<charT, traits>& e,
|
const basic_regex<charT, traits>& e,
|
||||||
regex_constants::match_flag_type flags = regex_constants::match_default);
|
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>
|
template <class charT, class traits>
|
||||||
bool
|
bool
|
||||||
regex_match(const charT* str, const basic_regex<charT, traits>& e,
|
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,
|
const basic_regex<charT, traits>& e,
|
||||||
regex_constants::match_flag_type flags = regex_constants::match_default);
|
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,
|
template <class OutputIterator, class BidirectionalIterator,
|
||||||
class traits, class charT, class ST, class SA>
|
class traits, class charT, class ST, class SA>
|
||||||
OutputIterator
|
OutputIterator
|
||||||
|
@ -655,6 +669,10 @@ public:
|
||||||
regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
regex_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
const regex_type& re,
|
const regex_type& re,
|
||||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
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(const regex_iterator&);
|
||||||
regex_iterator& operator=(const regex_iterator&);
|
regex_iterator& operator=(const regex_iterator&);
|
||||||
|
|
||||||
|
@ -690,16 +708,29 @@ public:
|
||||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
const regex_type& re, int submatch = 0,
|
const regex_type& re, int submatch = 0,
|
||||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
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,
|
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
const regex_type& re, const vector<int>& submatches,
|
const regex_type& re, const vector<int>& submatches,
|
||||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
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,
|
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
const regex_type& re, initializer_list<int> submatches,
|
const regex_type& re, initializer_list<int> submatches,
|
||||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
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>
|
template <size_t N>
|
||||||
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
const regex_type& re, const int (&submatches)[N],
|
const regex_type& re, const int (&submatches)[N],
|
||||||
regex_constants::match_flag_type m = regex_constants::match_default);
|
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(const regex_token_iterator&);
|
||||||
regex_token_iterator& operator=(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;
|
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
|
// regex_match
|
||||||
|
|
||||||
template <class _BidirectionalIterator, class _Allocator, class _CharT, class _Traits>
|
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);
|
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>
|
template <class _CharT, class _Traits>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
bool
|
bool
|
||||||
|
@ -6040,7 +6090,14 @@ public:
|
||||||
regex_iterator();
|
regex_iterator();
|
||||||
regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
regex_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||||
const regex_type& __re,
|
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;
|
bool operator==(const regex_iterator& __x) const;
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
@ -6156,16 +6213,38 @@ public:
|
||||||
const regex_type& __re, int __submatch = 0,
|
const regex_type& __re, int __submatch = 0,
|
||||||
regex_constants::match_flag_type __m =
|
regex_constants::match_flag_type __m =
|
||||||
regex_constants::match_default);
|
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,
|
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||||
const regex_type& __re, const vector<int>& __submatches,
|
const regex_type& __re, const vector<int>& __submatches,
|
||||||
regex_constants::match_flag_type __m =
|
regex_constants::match_flag_type __m =
|
||||||
regex_constants::match_default);
|
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
|
#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||||
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
regex_token_iterator(_BidirectionalIterator __a, _BidirectionalIterator __b,
|
||||||
const regex_type& __re,
|
const regex_type& __re,
|
||||||
initializer_list<int> __submatches,
|
initializer_list<int> __submatches,
|
||||||
regex_constants::match_flag_type __m =
|
regex_constants::match_flag_type __m =
|
||||||
regex_constants::match_default);
|
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
|
#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
|
||||||
template <size_t _Np>
|
template <size_t _Np>
|
||||||
regex_token_iterator(_BidirectionalIterator __a,
|
regex_token_iterator(_BidirectionalIterator __a,
|
||||||
|
@ -6174,6 +6253,16 @@ public:
|
||||||
const int (&__submatches)[_Np],
|
const int (&__submatches)[_Np],
|
||||||
regex_constants::match_flag_type __m =
|
regex_constants::match_flag_type __m =
|
||||||
regex_constants::match_default);
|
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(const regex_token_iterator&);
|
||||||
regex_token_iterator& operator=(const regex_token_iterator&);
|
regex_token_iterator& operator=(const regex_token_iterator&);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// template <class ST, class SA, class Allocator, class charT, class traits>
|
||||||
|
// bool regex_match(const basic_string<charT, ST, SA>&&,
|
||||||
|
// match_results<
|
||||||
|
// typename basic_string<charT, ST, SA>::const_iterator,
|
||||||
|
// Allocator>&,
|
||||||
|
// const basic_regex<charT, traits>&,
|
||||||
|
// regex_constants::match_flag_type =
|
||||||
|
// regex_constants::match_default) = delete;
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::smatch m;
|
||||||
|
std::regex re{"*"};
|
||||||
|
std::regex_match(std::string("abcde"), m, re);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,38 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// template <class ST, class SA, class Allocator, class charT, class traits>
|
||||||
|
// bool regex_search(const basic_string<charT, ST, SA>&&,
|
||||||
|
// match_results<
|
||||||
|
// typename basic_string<charT, ST, SA>::const_iterator,
|
||||||
|
// Allocator>&,
|
||||||
|
// const basic_regex<charT, traits>&,
|
||||||
|
// regex_constants::match_flag_type =
|
||||||
|
// regex_constants::match_default) = delete;
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::smatch m;
|
||||||
|
std::regex re{"*"};
|
||||||
|
std::regex_search(std::string("abcde"), m, re);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,38 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
const char phone_book[] = "555-1234, 555-2345, 555-3456";
|
||||||
|
std::cregex_iterator i(
|
||||||
|
std::begin(phone_book), std::end(phone_book),
|
||||||
|
std::regex("\\d{3}-\\d{4}"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,41 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <vector>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::regex phone_numbers("\\d{3}-(\\d{4})");
|
||||||
|
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||||
|
const int indices[] = {-1, 0, 1};
|
||||||
|
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||||
|
std::regex("\\d{3}-\\d{4}"), indices);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,38 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::regex phone_numbers("\\d{3}-(\\d{4})");
|
||||||
|
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||||
|
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||||
|
std::regex("\\d{3}-\\d{4}"), {-1, 0, 1});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,37 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||||
|
|
||||||
|
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
|
// const regex_type&& re, int submatch = 0,
|
||||||
|
// regex_constants::match_flag_type m =
|
||||||
|
// regex_constants::match_default);
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::regex phone_numbers("\\d{3}-\\d{4}");
|
||||||
|
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||||
|
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||||
|
std::regex("\\d{3}-\\d{4}"), -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,42 @@
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <regex>
|
||||||
|
|
||||||
|
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||||
|
|
||||||
|
// template <std::size_t N>
|
||||||
|
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||||
|
// const regex_type&& re,
|
||||||
|
// const std::vector<int>& submatches,
|
||||||
|
// regex_constants::match_flag_type m =
|
||||||
|
// regex_constants::match_default);
|
||||||
|
|
||||||
|
#include <__config>
|
||||||
|
|
||||||
|
#if _LIBCPP_STD_VER <= 11
|
||||||
|
#error
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::regex phone_numbers("\\d{3}-(\\d{4})");
|
||||||
|
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||||
|
std::vector<int> v;
|
||||||
|
v.push_back(-1);
|
||||||
|
v.push_back(-1);
|
||||||
|
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||||
|
std::regex("\\d{3}-\\d{4}"), v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -253,9 +253,9 @@
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2322">2322</a></td><td>Associative(initializer_list, stuff) constructors are underspecified</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2322">2322</a></td><td>Associative(initializer_list, stuff) constructors are underspecified</td><td>Issaquah</td><td></td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2323">2323</a></td><td>vector::resize(n, t)'s specification should be simplified</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2323">2323</a></td><td>vector::resize(n, t)'s specification should be simplified</td><td>Issaquah</td><td></td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2324">2324</a></td><td>Insert iterator constructors should use addressof()</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2324">2324</a></td><td>Insert iterator constructors should use addressof()</td><td>Issaquah</td><td></td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2329">2329</a></td><td>regex_match()/regex_search() with match_results should forbid temporary strings</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2329">2329</a></td><td>regex_match()/regex_search() with match_results should forbid temporary strings</td><td>Issaquah</td><td>Complete</td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2330">2330</a></td><td>regex("meow", regex::icase) is technically forbidden but should be permitted</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2330">2330</a></td><td>regex("meow", regex::icase) is technically forbidden but should be permitted</td><td>Issaquah</td><td></td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2332">2332</a></td><td>regex_iterator/regex_token_iterator should forbid temporary regexes</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2332">2332</a></td><td>regex_iterator/regex_token_iterator should forbid temporary regexes</td><td>Issaquah</td><td>Complete</td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2339">2339</a></td><td>Wording issue in nth_element</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2339">2339</a></td><td>Wording issue in nth_element</td><td>Issaquah</td><td></td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2341">2341</a></td><td>Inconsistency between basic_ostream::seekp(pos) and basic_ostream::seekp(off, dir)</td><td>Issaquah</td><td>Complete</td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2341">2341</a></td><td>Inconsistency between basic_ostream::seekp(pos) and basic_ostream::seekp(off, dir)</td><td>Issaquah</td><td>Complete</td></tr>
|
||||||
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2344">2344</a></td><td>quoted()'s interaction with padding is unclear</td><td>Issaquah</td><td></td></tr>
|
<tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2344">2344</a></td><td>quoted()'s interaction with padding is unclear</td><td>Issaquah</td><td></td></tr>
|
||||||
|
|
Loading…
Reference in New Issue