https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90105
--- Comment #2 from stoyanovmk at ornl dot gov --- Tested the fix provided by Jonathan Wakely, I can confirm the fix. Ran several tests with the included small example and the code where I found the issue in the first place.(In reply to Jonathan Wakely from comment #1) > I think this is the fix: > > --- a/libstdc++-v3/include/bits/forward_list.tcc > +++ b/libstdc++-v3/include/bits/forward_list.tcc > @@ -469,9 +469,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER > __p = static_cast<_Node*>(__p->_M_next); > --__psize; > } > - else if (__comp(*__p->_M_valptr(), *__q->_M_valptr())) > + else if (!__comp(*__q->_M_valptr(), *__p->_M_valptr())) > { > - // First node of p is lower; e must come from p. > + // First node of q is not lower; e must come from p. > __e = __p; > __p = static_cast<_Node*>(__p->_M_next); > --__psize; Tested the fix, I can confirm it works. Ran several tests with the included small example and the code where I found the issue in the first place.