On Saturday, March 5, 2016 at 6:40:49 AM UTC-6, Vicente J. Botet Escriba wrote:
Le 05/03/2016 13:22, Peter Dimov a écrit :
Rob Stewart wrote:
On March 4, 2016 3:27:08 PM EST, Paul Fultz II
javascript:> wrote: The library could switch to using `Callable`, if everyone feels
that is > better. However, I honestly prefer to make mutable explicit. I would > like to hear feedback from other reviewers as well.
I do not object to your requiring ConstCallable. I made boost/std::bind const-neutral because this felt the right thing to do - it's not bind's job to tell you what your function object ought to do, it just reflects whatever it does. At the same time, stateful function objects do have limited applicability outside of for_each which specifically guarantees order and returns the function object. You could pass bind( ++_1, 0 ) to generate_n and that's pretty much it.
So I do not see the requirement as a defect warranting rejection. If users demand Callable support, you'll add it. If not, not.
If your library only requires Callable, then users can supply a Callable or a ConstCallable. When you require a ConstCallable, they cannot supply a Callable. There may be valid reasons for that restriction in certain cases, but they should be documented rather than just imposed as a convention.
That's true in principle. In practice though function objects that are not ConstCallable are in 90% of the cases the result of a forgotten 'const' on operator() and not a deliberate decision. So requiring ConstCallable catches errors.
For me the question is if the functions provided by the library need that the function object must be const or not.
They do not need it. However, there can be some unexpected behavior when the user uses mutable function objects, because the functions can be copied or moved multiple times.
Vicente
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost