diff --git a/xml/issue3996.xml b/xml/issue3996.xml index 9fb492c612..98e094966f 100644 --- a/xml/issue3996.xml +++ b/xml/issue3996.xml @@ -45,10 +45,10 @@ int main() { In the above example, ranges::for_each requires indirect_unary_predicate<Pred, projected<I, identity>> which ultimately requires invocable<Pred&, iter_common_reference_t<projected<I, identity>>>.

-According to the current wording, the reference and value type of projected<I, identity> are filter_view&& -and filter_view& respectively, which causes its common reference to be eventually calculated as -const filter_view&. Since the former is not const-iterable, this results in a hard error during -instantiation because const begin is called unexpectedly in an unconstrained lambda. +According to the current wording, the reference and indirect value type of projected<I, identity> are +filter_view&& and filter_view& respectively, which causes its common reference to be eventually +calculated as const filter_view&. Since the former is not const-iterable, this results in a hard error +during instantiation because const begin is called unexpectedly in an unconstrained lambda.

It seems like having projected<I, identity> just be I is a more appropriate choice,