Improve is_range
This avoids the sizeof
hack in favour of a more idiomatic version
and also implements checks for all needed expressions:
- existenz of r.begin()
- existenz of r.end()
- inequality comparison of iterator and end-iterator
- end-iterator converts to iterator (dropped in C++17)
- prefix increment of iterator
- dereference of iterator
In order to avoid a "computed value not used warning" we add an additional call to a dummy function.
In fact this check is not complete, because it only accepts member begin() and end(). Adding support for std:: and adl-version would require a more complicated helper and thus better be placed in a real concept definition.