Create a 'comma_iterator' class that overloads operator, and asserts when it's called. Add tests to mismatch to make sure it can't be blindsided by such an evil iterator. More tests for other algorithms forthcoming. Thanks to STL for pointing this out at CppCon and Yakov Galka for opening LWG issue #2133

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@217902 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Marshall Clow
2014-09-16 20:38:11 +00:00
parent 4413ab09d5
commit 270f8e01e8
3 changed files with 121 additions and 0 deletions

View File

@@ -36,6 +36,14 @@ int main()
input_iterator<const int*>(ia+3),
input_iterator<const int*>(ib+3))));
assert(std::mismatch(comma_iterator<const int*>(ia),
comma_iterator<const int*>(ia + sa),
comma_iterator<const int*>(ib)) ==
(std::pair<comma_iterator<const int*>,
comma_iterator<const int*> >(
comma_iterator<const int*>(ia+3),
comma_iterator<const int*>(ib+3))));
#ifdef HAS_FOUR_ITERATOR_VERSION
assert(std::mismatch(input_iterator<const int*>(ia),
input_iterator<const int*>(ia + sa),

View File

@@ -39,6 +39,14 @@ int main()
input_iterator<const int*> >(
input_iterator<const int*>(ia+3),
input_iterator<const int*>(ib+3))));
assert(std::mismatch(comma_iterator<const int*>(ia),
comma_iterator<const int*>(ia + sa),
comma_iterator<const int*>(ib),
std::equal_to<int>()) ==
(std::pair<comma_iterator<const int*>,
comma_iterator<const int*> >(
comma_iterator<const int*>(ia+3),
comma_iterator<const int*>(ib+3))));
#ifdef HAS_FOUR_ITERATOR_VERSION
assert(std::mismatch(input_iterator<const int*>(ia),
input_iterator<const int*>(ia + sa),