Proposed resolution:
This wording is relative to N4791.
[Drafting Note: This wording uses the recently-defined core language term "usable in constant expressions" from [expr.const] paragraph 3 which may be unfamiliar to reviewers.]
Change [iterator.concept.sizedsentinel] as follows:
[…]
(2.2) — If −N is representable by iter_difference_t<I>, then i - s is well-defined and equals −N.
-?- Pursuant to [namespace.std], users may specialize disable_sized_sentinel for cv-unqualified non-array object types S and I at least one of which is a program-defined type. Such specializations shall be usable in constant expressions ([expr.const]) and have type const bool.
3 [Note: disable_sized_sentinel allows use of sentinels and iterators with the library that satisfy but do not in fact model SizedSentinel.—end note]
[…]
Add an index entry for disable_sized_sentinel that points to [iterator.concepts.sizedsentinel].
Change [range.sized] as follows:
[…]
3 [Note: The complexity requirement for the evaluation of ranges::size is non-amortized, unlike the case for the complexity of the evaluations of ranges::begin and ranges::end in the Range concept.—end note]
-?- Pursuant to [namespace.std], users may specialize disable_sized_range for cv-unqualified program-defined types. Such specializations shall be usable in constant expressions ([expr.const]) and have type const bool.
4 [Note: disable_sized_range allows use of range types with the library that satisfy but do not in fact model SizedRange.—end note]
Add an index entry for disable_sized_range that points to [range.sized].
Change [range.view] as follows:
[…]
5 Pursuant to [namespace.std], users may specialize enable_view to true for cv-unqualified program-defined types which model View, and false for types which do not. Such specializations shall be usable in constant expressions ([expr.const]) and have type const bool.