https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92546
--- Comment #27 from Jonathan Wakely <redi at gcc dot gnu.org> --- pst/algorithm_impl.h includes <functional> just because it needs std::not_fn. We could move that to a separate header. Even without that, we could do: --- a/libstdc++-v3/include/pstl/algorithm_impl.h +++ b/libstdc++-v3/include/pstl/algorithm_impl.h @@ -10,11 +10,12 @@ #ifndef _PSTL_ALGORITHM_IMPL_H #define _PSTL_ALGORITHM_IMPL_H -#include <iterator> #include <type_traits> -#include <utility> #include <functional> #include <algorithm> +#include <bits/stl_iterator_base_types.h> +#include <bits/stl_iterator_base_funcs.h> +#include <bits/stl_pair.h> #include "execution_impl.h" #include "memory_impl.h" And similarly: --- a/libstdc++-v3/include/pstl/glue_numeric_impl.h +++ b/libstdc++-v3/include/pstl/glue_numeric_impl.h @@ -10,7 +10,7 @@ #ifndef _PSTL_GLUE_NUMERIC_IMPL_H #define _PSTL_GLUE_NUMERIC_IMPL_H -#include <functional> +#include <bits/stl_function.h> #include "utils.h" #include "numeric_fwd.h" And: --- a/libstdc++-v3/include/pstl/memory_impl.h +++ b/libstdc++-v3/include/pstl/memory_impl.h @@ -10,7 +10,8 @@ #ifndef _PSTL_MEMORY_IMPL_H #define _PSTL_MEMORY_IMPL_H -#include <iterator> +#include <bits/move.h> +#include <bits/stl_iterator_base_types.h> #include "unseq_backend_simd.h" However, these headers come from upstream, so this would slightly complicate rebasing on new upstream versions.