Skip to content

Commit 083b8ff

Browse files
committed
New issue from Hewill: "basic_const_iterator should provide iterator_type"
1 parent 3d564d3 commit 083b8ff

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

xml/issue4253.xml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?xml version='1.0' encoding='utf-8' standalone='no'?>
2+
<!DOCTYPE issue SYSTEM "lwg-issue.dtd">
3+
4+
<issue num="4253" status="New">
5+
<title>`basic_const_iterator` should provide `iterator_type`</title>
6+
<section><sref ref="[const.iterators.iterator]"/></section>
7+
<submitter>Hewill Kang</submitter>
8+
<date>29 Apr 2025</date>
9+
<priority>99</priority>
10+
11+
<discussion>
12+
<p>
13+
Currently, iterator adaptors in <code>&lt;iterator&gt;</code> that wrap a single iterator
14+
such as `reverse_iterator`, `move_iterator`, and `counted_iterator` all provide a
15+
public `iterator_type` member for users to access the underlying iterator type, except for
16+
`basic_const_iterator` (<a href="https://godbolt.org/z/4hY4qhnPG">demo</a>):
17+
</p>
18+
<blockquote><pre>
19+
#include &lt;iterator&gt;
20+
21+
using I = int*;
22+
using RI = std::reverse_iterator&lt;I&gt;;
23+
using MI = std::move_iterator&lt;I&gt;;
24+
using CI = std::counted_iterator&lt;I&gt;;
25+
using BI = std::basic_const_iterator&lt;I&gt;;
26+
27+
static_assert(std::same_as&lt;RI::iterator_type, I&gt;);
28+
static_assert(std::same_as&lt;MI::iterator_type, I&gt;);
29+
static_assert(std::same_as&lt;CI::iterator_type, I&gt;);
30+
static_assert(std::same_as&lt;BI::iterator_type, I&gt;); // <span style="color:#C80000;font-weight:bold">fire</span>
31+
</pre></blockquote>
32+
<p>
33+
It seems reasonable to add one for `basic_const_iterator` for consistency.
34+
</p>
35+
</discussion>
36+
37+
<resolution>
38+
<p>
39+
This wording is relative to <paper num="N5008"/>.
40+
</p>
41+
<ol>
42+
43+
<li><p>Modify <sref ref="[const.iterators.iterator]"/> as indicated:</p>
44+
45+
<blockquote>
46+
<pre>
47+
namespace std {
48+
[&hellip;]
49+
template&lt;input_iterator Iterator&gt;
50+
class basic_const_iterator {
51+
Iterator <i>current_</i> = Iterator(); // <i>exposition only</i>
52+
using <i>reference</i> = iter_const_reference_t&lt;Iterator&gt;; // <i>exposition only</i>
53+
using <i>rvalue-reference</i> = // <i>exposition only</i>
54+
<i>iter-const-rvalue-reference-t</i>&lt;Iterator&gt;;
55+
56+
public:
57+
<ins>using iterator_type = I;</ins>
58+
using iterator_concept = <i>see below</i>;
59+
using iterator_category = <i>see below</i>; // <i>not always present</i>
60+
using value_type = iter_value_t&lt;Iterator&gt;;
61+
using difference_type = iter_difference_t&lt;Iterator&gt;;
62+
[&hellip;]
63+
};
64+
}
65+
</pre>
66+
</blockquote>
67+
</li>
68+
</ol>
69+
</resolution>
70+
71+
</issue>

0 commit comments

Comments
 (0)