@@ -40,9 +40,125 @@ class types provided by the standard library via <tt>volatile</tt> glvalues are
4040
4141<note >Kona 2022-11-12; Set priority to 2</note >
4242
43+ <note >2025-03-22; Jiang An comments and provides wording</note >
44+ <p >
45+ The proposed resolution relaxes the `input_iterator` concept (which in turn relaxes stronger iterator concepts)
46+ and extends `iter_const_reference_t` and the exposition only <tt ><i >iter-const-rvalue-reference-t</i ></tt >
47+ aliases. Another approach can be just relaxing the `indirectly_readable` concept, but its impact may be larger
48+ than expected.
49+ </p >
4350</discussion >
4451
4552<resolution >
53+ <p >
54+ This wording is relative to <paper num =" N5008" />.
55+ </p >
56+
57+ <ol >
58+
59+ <li ><p >Modify <sref ref =" [iterator.synopsis]" />, header <tt >< iterator> </tt > synopsis, as indicated:</p >
60+
61+ <blockquote >
62+ <pre >
63+ [… ]
64+ <i >// <sref ref =" [iterator.concept.input]" />, concept input_iterator</i >
65+ <ins >template< class I>
66+ concept <i >deref-to-value-t</i > = <i >see below</i >; <i >// freestanding</i >
67+
68+ template< class I>
69+ concept <i >weakly-indirectly-readable</i > = <i >see below</i >; <i >// freestanding</i ></ins >
70+
71+ template< class I>
72+ concept input_iterator = <i >see below</i >; <i >// freestanding</i >
73+
74+ [… ]
75+
76+ <i >// <sref ref =" [const.iterators.alias]" />, alias templates</i >
77+ template< <del >indirectly_readable</del ><ins ><i >weakly-indirectly-readable</i ></ins > I>
78+ using iter_const_reference_t = <i >see below</i >;
79+ </pre >
80+ </blockquote >
81+ </li >
82+
83+ <li ><p >Modify <sref ref =" [iterator.concept.input]" />, concept <tt >input_iterator</tt > synopsis, as indicated:</p >
84+
85+ <blockquote >
86+ <pre >
87+ <ins >template< class I>
88+ concept <i >deref-to-value-t-impl</i > = <i >// exposition only</i >
89+ same_as< remove_cvref_t< iter_reference_t< I>> , iter_value_t< I>> &&
90+ is_object_v< iter_value_t< I>> ;
91+
92+ template< class I>
93+ concept <i >deref-to-value-t</i > = <i >// exposition only</i >
94+ <i >deref-to-value-t-impl</i >< remove_cvref_t< I>> ;
95+
96+ template< class I>
97+ concept <i >weakly-indirectly-readable</i > = <i >// exposition only</i >
98+ <i >deref-to-value-t</i >< I> ||
99+ indirectly_readable< I> ;</ins >
100+
101+ template< class I>
102+ concept input_iterator =
103+ input_or_output_iterator< I> &&
104+ <del >indirectly_readable</del ><ins ><i >weakly-indirectly-readable</i ></ins >< I> &&
105+ requires { typename <i >ITER_CONCEPT</i >(I); } &&
106+ derived_from< <i >ITER_CONCEPT</i >(I), input_iterator_tag> ;
107+ </pre >
108+ </blockquote >
109+ </li >
110+
111+ <li ><p >Modify <sref ref =" [const.iterators.alias]" /> as indicated:</p >
112+
113+ <blockquote >
114+ <pre >
115+ <ins >template< class T>
116+ using <i >ref-add-const-t</i > = <i >see below</i >;</ins >
117+ </pre >
118+ <blockquote >
119+ <p >
120+ <ins >-?- <i >Result</i >: If <tt >is_lvalue_reference_v< T> </tt > is `true`,
121+ <tt >const remove_reference_t< T>& </tt >. Otherwise, if <tt >is_rvalue_reference_v< T> </tt >
122+ is `true`, <tt >const remove_reference_t< T>&& </tt >. Otherwise, <tt >T</tt >.</ins >
123+ </p >
124+ </blockquote >
125+ <pre >
126+ template< <del >indirectly_readable</del ><ins ><i >weakly-indirectly-readable</i ></ins > It>
127+ using iter_const_reference_t = <ins >see below;</ins >
128+ <del >common_reference_t< const iter_value_t< It>&& , iter_reference_t< It>> ;</del >
129+ </pre >
130+ <blockquote >
131+ <p >
132+ <ins >-?- <i >Result</i >: If `It` models <tt ><i >deref-to-value-t</i ></tt >,
133+ <tt ><i >ref-add-const-t</i >< iter_reference_t< It>> </tt >. Otherwise,
134+ <tt >common_reference_t< const iter_value_t< It>&& , iter_reference_t< It>> </tt >.</ins >
135+ </p >
136+ </blockquote >
137+ </blockquote >
138+
139+ <blockquote class =" note" >
140+ <p >
141+ [<i >Drafting note</i >: The simple <tt ><i >deref-to-value-t</i ></tt > case should be detected first,
142+ which avoids unnecessary instantiations and IFNDR-ness.]
143+ </p >
144+ </blockquote >
145+
146+ </li >
147+
148+ <li ><p >Modify <sref ref =" [const.iterators.iterator]" /> as indicated:</p >
149+
150+ <blockquote >
151+ <pre >
152+ [… ]
153+ template< <del >indirectly_readable</del ><ins ><i >weakly-indirectly-readable</i ></ins > I>
154+ using <i >iter-const-rvalue-reference-t</i > = <i >// exposition only</i >
155+ common_reference_t< const iter_value_t< I>&& , iter_rvalue_reference_t< I>> ;
156+ [… ]
157+ </pre >
158+ </blockquote >
159+ </li >
160+
161+ </ol >
46162</resolution >
47163
48164</issue >
0 commit comments