diff --git a/xml/issue3403.xml b/xml/issue3403.xml index baf72e39f7..583b2f4547 100644 --- a/xml/issue3403.xml +++ b/xml/issue3403.xml @@ -30,6 +30,63 @@ expression, I think it's an improvement?

Priority to 2 after reflector discussion.

2020-07-22 Casey provides wording + +

Previous resolution [SUPERSEDED]:

+
+

+This wording is relative to N4861. +

+ +
    +
  1. Add a new paragraph after paragraph 1 in :

    +
    + +-?- Also within this clause, +make-signed-like-t<X> +for an integer-like type X +denotes make_signed_t<X> +if X is an integer type; +otherwise, it denotes a corresponding +unspecified signed-integer-like type +of the same width as X. + +
    +
  2. + +
  3. Modify as indicated:

    + +
    +

    -1- The name ranges::ssize denotes +a customization point object (). +The expression ranges::ssize(E) +for a subexpression E of type T +is expression-equivalent to: +

    +(1.1) — If range_difference_t<T> has +width less than ptrdiff_t, +static_cast<ptrdiff_t>(ranges::size(E)). +

    +(1.2) — Otherwise, +static_cast<range_difference_t<T>>(ranges::size(E)). +

    + +-?- Given a subexpression E with type T, +let t be an lvalue that denotes the reified object for E. +If ranges::size(t) is ill-formed, +ranges::ssize(E) is ill-formed. +Otherwise, let D be the wider of +ptrdiff_t or decltype(ranges::size(t)); +ranges::ssize(E) is expression-equivalent to +static_cast<make-signed-like-t<D>>(ranges::size(t)). + +

    +
    +
  4. +
+
+ +2020-07-31 Casey provides updated wording +Per discussion on the reflector. @@ -48,7 +105,7 @@ since we don't need it at this time.]
--?- Also within this clause, +-?- Also within this Clause, make-signed-like-t<X> for an integer-like type X denotes make_signed_t<X> @@ -81,10 +138,11 @@ width less than ptrdiff_t, let t be an lvalue that denotes the reified object for E. If ranges::size(t) is ill-formed, ranges::ssize(E) is ill-formed. -Otherwise, let D be the wider of -ptrdiff_t or decltype(ranges::size(t)); +Otherwise let D be +make-signed-like-t<decltype(ranges::size(t))>, +or ptrdiff_t if it is wider than that type; ranges::ssize(E) is expression-equivalent to -static_cast<make-signed-like-t<D>>(ranges::size(t)). +static_cast<D>(ranges::size(t)).