https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92236
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Another idea would be to add a new flag which chooses between brief and verbose explanations of satisfaction failure during overload resolution. By default just say that an overload isn't viable because type X doesn't satisfy std::forward_iterator, but with -fsatisfy-me-harder show that it doesn't satisfy forward_iterator because it doesn't satisfy input_iterator because it doesn't satisfy readable because common_reference_t<T, U> is an invalid type. That would allow you to debug unexpected satisfaction failures without having to edit the code to add a static_assert. The currently-commented-out code that replays the substitution could be controlled by that new flag.