https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78030

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|c++                         |libstdc++

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I don't think this is a front-end bug but possible a library bug.
Take a look at the implementation:

  template<typename _ForwardIterator, typename _Predicate>
    _ForwardIterator
    __remove_if(_ForwardIterator __first, _ForwardIterator __last,
  _Predicate __pred)
    {
      __first = std::__find_if(__first, __last, __pred);
      if (__first == __last)
 return __first;
      _ForwardIterator __result = __first;
      ++__first;
      for (; __first != __last; ++__first)
 if (!__pred(__first))
   {
     *__result = std::move(*__first);
     ++__result;
   }
      return __result;
    }


Notice how we call __find_if, it makes a copy of __pred which means we get a
new copy of s for the lambda.

This effect can be seen if we add:
            print(s);

to the lambda:

1
1 2
1 2 4

1
1 4
1 4 5
1 4 5
1 4 5
1 4 5
1 4 5
1 3 4 5
----- CUT -----
The question now becomes is your lambda a valid Predicate function.
I think no.

Reply via email to