Created on 2023-03-18.00:00:00 last changed 1 week ago
[For the term SCARY see N2911 and N2913.]In [range.factories] and [range.adaptors], many iterator types are specified as exposition-only nested classes or nested class templates. This has some observable differences from specifying them as class templates declared in the namespace scope:
value types are generally not associated entities of iterators or sentinels during ADL, which prevents unintended overloads to be found;
two different range adaptor/factory types, e.g. iota_view<I, S1> and iota_view<I, S2>, have different iterator types.
The ADL reduction seems preferable. However, is it intended to required to any two different range adaptor/factory types to have two different iterator types, even when the same iterator type can work as expected?Sentinel types don't seem able to be SCARY as they are dependent on iterator types.