summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-11-13 09:45:12 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2025-11-13 14:29:15 +0000
commit9332dfd4523ddb100668a7c11a144a2bd676da7e (patch)
treee358041c2d6902cf124b7c9a44e85278c43829c4 /libstdc++-v3
parentbc7a89048eafe81702c6ab5b8236cea028212fda (diff)
libstdc++: Fix std::forward_list::assign assignable check [PR122661]
The std::is_assignable check should test for assignment to an lvalue, not an rvalue. libstdc++-v3/ChangeLog: PR libstdc++/122661 * include/bits/forward_list.h (forward_list::assign(I, I)): Fix value category in is_assignable check. * testsuite/23_containers/forward_list/modifiers/122661.cc: New test.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/include/bits/forward_list.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc20
2 files changed, 21 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/forward_list.h b/libstdc++-v3/include/bits/forward_list.h
index 8bcfb809319..459b2f65ad1 100644
--- a/libstdc++-v3/include/bits/forward_list.h
+++ b/libstdc++-v3/include/bits/forward_list.h
@@ -1046,7 +1046,7 @@ namespace __fwdlist
void
assign(_InputIterator __first, _InputIterator __last)
{
- if constexpr (is_assignable<_Tp, decltype(*__first)>::value)
+ if constexpr (is_assignable<_Tp&, decltype(*__first)>::value)
{
auto __prev = before_begin();
auto __curr = begin();
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc
new file mode 100644
index 00000000000..41ac32c7ec6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++11 } }
+
+// Bug 122661 - Incorrect value category handling in forward_list::assign
+
+#include <forward_list>
+
+struct S
+{
+ S();
+ S& operator=(S const&) & = delete;
+ S& operator=(S const&) &&;
+};
+
+void
+test_pr122661()
+{
+ std::forward_list<S> fl;
+ S* iter = nullptr;
+ fl.assign(iter, iter);
+}