https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108536
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This is not a bug, you've just transformed your working code to use a
requires-clause incorrectly.
This works fine:
template <typename F, typename DecayF = std::decay_t<F>>
requires (!std::derived_from<DecayF, Base>)
&& std::constructible_from<DecayF, F>
Base(F&&) {}
