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:
Marshall Clow
2014-02-19 21:21:11 +00:00
parent d81d83f098
commit e0f8672e7a
9 changed files with 364 additions and 3 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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