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

* 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: r253896
This commit is contained in:
Jonathan Wakely 2017-10-19 14:57:06 +01:00 committed by Jonathan Wakely
parent 89b1e16136
commit 551124d561
3 changed files with 26 additions and 2 deletions

View File

@ -1,5 +1,10 @@
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.
* doc/xml/manual/status_cxx2017.xml: Update references to C++17
section numbers.

View File

@ -725,10 +725,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
pointer operator->() const { return std::__addressof(**this); }
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--(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)
{ 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
main()
{
test01();
test02();
test03();
}