LWG 1278
llvm-svn: 111532
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: e57dc14c444e6cac88b351852f0fa9aaf5f1205d
diff --git a/include/forward_list b/include/forward_list
index 44d381a..038d85d 100644
--- a/include/forward_list
+++ b/include/forward_list
@@ -942,7 +942,7 @@
forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, size_type __n,
const value_type& __v)
{
- __node_pointer const __r = const_cast<__node_pointer>(__p.__ptr_);
+ __node_pointer __r = const_cast<__node_pointer>(__p.__ptr_);
if (__n > 0)
{
__node_allocator& __a = base::__alloc();
@@ -977,6 +977,7 @@
#endif
__last->__next_ = __r->__next_;
__r->__next_ = __first;
+ __r = __last;
}
return iterator(__r);
}
@@ -991,7 +992,7 @@
forward_list<_Tp, _Alloc>::insert_after(const_iterator __p,
_InputIterator __f, _InputIterator __l)
{
- __node_pointer const __r = const_cast<__node_pointer>(__p.__ptr_);
+ __node_pointer __r = const_cast<__node_pointer>(__p.__ptr_);
if (__f != __l)
{
__node_allocator& __a = base::__alloc();
@@ -1026,6 +1027,7 @@
#endif
__last->__next_ = __r->__next_;
__r->__next_ = __first;
+ __r = __last;
}
return iterator(__r);
}
diff --git a/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp b/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp
index f924fe9..211197f 100644
--- a/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp
+++ b/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_init.pass.cpp
@@ -27,14 +27,14 @@
assert(distance(c.begin(), c.end()) == 0);
i = c.insert_after(c.cbefore_begin(), {0, 1, 2});
- assert(i == c.before_begin());
+ assert(i == next(c.before_begin(), 3));
assert(distance(c.begin(), c.end()) == 3);
assert(*next(c.begin(), 0) == 0);
assert(*next(c.begin(), 1) == 1);
assert(*next(c.begin(), 2) == 2);
i = c.insert_after(c.begin(), {3, 4});
- assert(i == c.begin());
+ assert(i == next(c.begin(), 2));
assert(distance(c.begin(), c.end()) == 5);
assert(*next(c.begin(), 0) == 0);
assert(*next(c.begin(), 1) == 3);
diff --git a/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp b/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp
index bf8a731..f04fcc9 100644
--- a/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp
+++ b/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_range.pass.cpp
@@ -32,14 +32,14 @@
assert(distance(c.begin(), c.end()) == 0);
i = c.insert_after(c.cbefore_begin(), J(t), J(t+3));
- assert(i == c.before_begin());
+ assert(i == next(c.before_begin(), 3));
assert(distance(c.begin(), c.end()) == 3);
assert(*next(c.begin(), 0) == 0);
assert(*next(c.begin(), 1) == 1);
assert(*next(c.begin(), 2) == 2);
i = c.insert_after(c.begin(), J(t+3), J(t+5));
- assert(i == c.begin());
+ assert(i == next(c.begin(), 2));
assert(distance(c.begin(), c.end()) == 5);
assert(*next(c.begin(), 0) == 0);
assert(*next(c.begin(), 1) == 3);
diff --git a/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp b/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp
index 312c146..89e4c73 100644
--- a/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp
+++ b/test/containers/sequences/forwardlist/forwardlist.modifiers/insert_after_size_value.pass.cpp
@@ -27,14 +27,14 @@
assert(distance(c.begin(), c.end()) == 0);
i = c.insert_after(c.cbefore_begin(), 3, 3);
- assert(i == c.before_begin());
+ assert(i == next(c.before_begin(), 3));
assert(distance(c.begin(), c.end()) == 3);
assert(*next(c.begin(), 0) == 3);
assert(*next(c.begin(), 1) == 3);
assert(*next(c.begin(), 2) == 3);
i = c.insert_after(c.begin(), 2, 2);
- assert(i == c.begin());
+ assert(i == next(c.begin(), 2));
assert(distance(c.begin(), c.end()) == 5);
assert(*next(c.begin(), 0) == 3);
assert(*next(c.begin(), 1) == 2);