mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
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.
This commit is contained in:
committed by
Jonathan Wakely
parent
bc7a89048e
commit
9332dfd452
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user