Listing 1
template <typename R, typename T>
size_t r_count_impl(R r, const T &val, notional_range_tag const &)
{
size_t n;
for(n = 0; r; ++r)
{
if(val == *r)
{
++n;
}
}
return n;
}
template <typename R, typename T>
size_t r_count_impl(R r, const T &val, iterable_range_tag const &)
{
return std::count(r.begin(), r.end(), val);
}
template <typename R, typename T>
size_t r_count_impl(R r, const T &val, indirect_range_tag const &)
{
return r.count(val);
}
template <typename R, typename T>
size_t r_count(R r, const T &val)
{
return r_count_impl(r, val, r);
}