I was thinking that it might be nice to get rid of predefined_ops.h content. So here is a start with __negate. Drawback is that stl_algo.h has to include . For now I just get rid of stl_algo.h include in to rather use stl_algobase.h. But maybe it would be better to also isolate std::not_fn in a dedicated header file so that stl_algo.h do not have to include all .     libstdc++: Replace __gnu_cxx::__ops::__negate with std::not_fn     Replace the internal __gnu_cxx::__ops::__negate function and associated     __gnu_cxx::__ops::_Iter_negate by the C++17 std::not_fn.     libstdc++-v3/ChangeLog:             * include/bits/predefined_ops.h: Include .             [__cpp_lib_not_fn](__gnu_cxx::__ops::_Iter_negate): Remove.             [__cpp_lib_not_fn](__gnu_cxx::__ops::__negate): Remove.             * include/bits/stl_algo.h: Include for C++17 and later.             [__cpp_lib_not_fn](__find_if_not): Use std::not_fn.             (std::__search, std::search(_FwdIt1, _FwdIt1, _FwdIt2, _FwdIt2, _BinPred)): Move...             * include/bits/stl_algobase.h: ...here.             * include/std/functional: Replace include by . Tests still running. François