diff options
| author | Jonathan Wakely <jwakely@redhat.com> | 2025-11-13 09:45:12 +0000 |
|---|---|---|
| committer | Jonathan Wakely <redi@gcc.gnu.org> | 2025-11-13 14:29:15 +0000 |
| commit | 9332dfd4523ddb100668a7c11a144a2bd676da7e (patch) | |
| tree | e358041c2d6902cf124b7c9a44e85278c43829c4 /libstdc++-v3 | |
| parent | bc7a89048eafe81702c6ab5b8236cea028212fda (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.h | 2 | ||||
| -rw-r--r-- | libstdc++-v3/testsuite/23_containers/forward_list/modifiers/122661.cc | 20 |
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); +} |
