On Fri, Jul 20, 2018 at 11:11 AM Peter Dimov via Boost < boost@lists.boost.org> wrote:
The compilers are correct, but so is the archetype. Input iterator requirements say that *it is convertible to the value_type, and it is, in our case. The problem however is that op== is a template and the first argument fails deduction. std::find is specified in terms of the exact expression `*it == value`, so if it doesn't compile (and it doesn't), `find(it, it, value)` won't compile either.
It's not clear to me what needs to be done here. The fact that the STL's ad hoc algorithm requirements are not cleanly expressible in a rigorous manner has been rediscovered by every attempt of conceptifying it.
What do you think about the fact that if the no_proxy version is used, all the failures resolve?