libstdc++: Fix resolution of LWG 4016 for std::ranges::to [PR112876]
What I implemented in r14-6199-g45630fbcf7875b does not match what I proposed for LWG 4016, and it imposes additional, unwanted requirements on the emplace and insert member functions of the container being populated. libstdc++-v3/ChangeLog: PR libstdc++/112876 * include/std/ranges (ranges::to): Do not try to use an iterator returned by the container's emplace or insert member functions. * testsuite/std/ranges/conv/1.cc (Cont4::emplace, Cont4::insert): Use the iterator parameter. Do not return an iterator.
This commit is contained in:
parent
36be2a0e91
commit
a314edee24
2 changed files with 9 additions and 13 deletions
|
@ -9300,14 +9300,10 @@ namespace __detail
|
|||
__c.emplace_back(*__it);
|
||||
else if constexpr (requires { __c.push_back(*__it); })
|
||||
__c.push_back(*__it);
|
||||
else if constexpr (requires { __c.emplace(__c.end(), *__it); })
|
||||
__c.emplace(__c.end(), *__it);
|
||||
else
|
||||
{
|
||||
auto __end = __c.end();
|
||||
if constexpr (requires { __c.emplace(__end, *__it); })
|
||||
__end = __c.emplace(__end, *__it);
|
||||
else
|
||||
__end = __c.insert(__end, *__it);
|
||||
}
|
||||
__c.insert(__c.end(), *__it);
|
||||
++__it;
|
||||
}
|
||||
return __c;
|
||||
|
|
|
@ -236,19 +236,19 @@ struct Cont4
|
|||
template<typename T>
|
||||
requires (Kind <= Emplace)
|
||||
&& requires(C& c, T&& t) { c.emplace(c.end(), std::forward<T>(t)); }
|
||||
typename C::iterator
|
||||
emplace(typename C::iterator, T&& t)
|
||||
void
|
||||
emplace(typename C::iterator pos, T&& t)
|
||||
{
|
||||
kind = Emplace;
|
||||
return c.emplace(c.end(), std::forward<T>(t));
|
||||
c.emplace(pos, std::forward<T>(t));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
typename C::iterator
|
||||
insert(typename C::iterator, T&& t)
|
||||
void
|
||||
insert(typename C::iterator pos, T&& t)
|
||||
{
|
||||
kind = Insert;
|
||||
return c.insert(c.end(), std::forward<T>(t));
|
||||
c.insert(pos, std::forward<T>(t));
|
||||
}
|
||||
|
||||
// Required to satisfy reservable-container
|
||||
|
|
Loading…
Add table
Reference in a new issue