On 19 June 2013 11:52, Robert Jones wrote:
_If_ this is the best way to count the elements in a filtered range, what about defining
Range boost::count(Range&& r);
to count all element in the range? It could call size() if available and count_if otherwise.
I'm not quite sure I'm understanding the question! Does
boost::count( filtered_range );
not do exactly what you want? Also, I don't understand why you'd like am rvalue ref version of count when the argument is const, but that might be my naivety about how to use rvalues.
If Range is a template parameter then Range&& can also bind to lvalues, and Range will be deduced as an lvalue-reference type such as X&. The signature above would therefore return an rvalue when passed an rvalue, and return an lvalue when passed an lvalue. I'm not sure how it would return the number that it's supposed to be counting though, I'd have expected it to return the range's difference type, and in that case it might as well be count(const Range&), or count(const Range&, const Value&) like the existing range algorithm.