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

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Anybody who promised concepts will always result in better errors was lying or
misinformed. They have the potential to help, but it takes real effort to make
it happen.

ranges::find_if is constrained to require the function to be callable with
those argument types, and that fails here. I'm not sure how we can do better.
If is_invocable is false, all we know is it's false. We can't poke at the
definition of is_invocable to see why.

A __builtin_is_invocable could _maybe_ capture more detail about the failure
which could then be recalled and displayed if there's a compilation failure due
to is_invocable not being satisfied (something which would be much more
difficult for enable_if-based constraints, but plausible with concepts, maybe).

I'm this specific case it's true that the error for std::find_if happens to be
quite clear, but I'm the general case it's better to be told "this function
requires is_invocable_v<F, A> and you didn't satisfy that" then to get errors
deep inside an instantiation stack.

Reply via email to