Fix path::iterator post-increment and post-decrement

Backport from mainline
2017-10-19  Jonathan Wakely  <jwakely@redhat.com>

	* include/experimental/bits/fs_path.h (path::iterator++(int))
	(path::iterator--(int)): Fix for paths with only one component.
	* testsuite/experimental/filesystem/path/itr/traversal.cc: Test
	post-increment and post-decrement.

From-SVN: r253942
This commit is contained in:
Jonathan Wakely 2017-10-20 16:14:23 +01:00 committed by Jonathan Wakely
parent 47ffadd915
commit 24aeb1b939
3 changed files with 31 additions and 2 deletions

View File

@ -1,3 +1,13 @@
2017-10-20 Jonathan Wakely <jwakely@redhat.com>
Backport from mainline
2017-10-19 Jonathan Wakely <jwakely@redhat.com>
* include/experimental/bits/fs_path.h (path::iterator++(int))
(path::iterator--(int)): Fix for paths with only one component.
* testsuite/experimental/filesystem/path/itr/traversal.cc: Test
post-increment and post-decrement.
2017-09-21 Jonathan Wakely <jwakely@redhat.com> 2017-09-21 Jonathan Wakely <jwakely@redhat.com>
* testsuite/25_algorithms/clamp/1.cc: Fix order of arguments and * testsuite/25_algorithms/clamp/1.cc: Fix order of arguments and

View File

@ -724,10 +724,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
pointer operator->() const { return std::__addressof(**this); } pointer operator->() const { return std::__addressof(**this); }
iterator& operator++(); iterator& operator++();
iterator operator++(int) { auto __tmp = *this; ++_M_cur; return __tmp; } iterator operator++(int) { auto __tmp = *this; ++*this; return __tmp; }
iterator& operator--(); iterator& operator--();
iterator operator--(int) { auto __tmp = *this; --_M_cur; return __tmp; } iterator operator--(int) { auto __tmp = *this; --*this; return __tmp; }
friend bool operator==(const iterator& __lhs, const iterator& __rhs) friend bool operator==(const iterator& __lhs, const iterator& __rhs)
{ return __lhs._M_equals(__rhs); } { return __lhs._M_equals(__rhs); }

View File

@ -79,9 +79,28 @@ test02()
} }
} }
void
test03()
{
path paths[] = { "single", "multiple/elements" };
for (const path& p : paths)
for (auto iter = p.begin(); iter != p.end(); ++iter)
{
auto iter2 = iter;
++iter;
iter2++;
VERIFY( iter2 == iter );
auto iter3 = iter;
--iter3;
iter2--;
VERIFY( iter2 == iter3 );
}
}
int int
main() main()
{ {
test01(); test01();
test02(); test02();
test03();
} }