- Make IterOfRange and ValueOfRange work with types that require custom begin/end functions.
- Allow for adl_begin/adl_end to be used in constant-evaluated contexts.
- Use SFINAE-friendly trailing return type deductions adl_begin/adl_end so that they are useable in template argument deduction.
- Add missing documentation comments.
This is required for future work in https://reviews.llvm.org/D144503.