<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/133111>133111</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[libc++] Investigate how we create iterators in bitset
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libc++
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ldionne
</td>
</tr>
</table>
<pre>
I am tempted to see whether we can introduce `__begin()` and `__end()` functions instead, and get rid of `__make_iter` entirely. I'd imagine something like
```
iterator __begin() { return /* __make_iter(0); */ }
iterator __end() { return /* __make_iter(_Size); */ }
// and then here's an example usage
// OLD:
std::copy_backward(__base::__make_iter(0), __base::__make_iter(_Size - __pos), __base::__make_iter(_Size));
// NEW:
std::copy_backward(__begin(), __end() - __pos, __end());
```
Now the main question IMO is whether `__end() - __pos` produces equivalent code. I think we'll end up calling https://github.com/llvm/llvm-project/blob/52f941adbc2815487a0582ffedf3fb8cebe9cedd/libcxx/include/__bit_reference#L368, which might not produce efficient code. I still think we should investigate that since that looks like the way we'd want to write our code at a high level.
_Originally posted by @ldionne in https://github.com/llvm/llvm-project/pull/121312#discussion_r2014484606_
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVMFu2zgQ_Rr6MqhBkZJlH3RImjUQoNsc9rBHgSJH0mxo0iWpKN6vX1B2Ehvboi0g0CI9nHnvzeipGGlwiA2r7ln1sFJTGn1orCHvHK46b04NPII6QMLDMaGB5CEiwjxiGjHAjKCVA3IpeDNpBLbhbdvhQI6JLRM7tuGgnDmfozMfp_3kdCLvIpCLCZVh4vMSOmCCQAZ8f751UM_YUsKQb6FLFNCe1vDIRG2ADmoghxD9AdNIbgBLz8j4A-N3l3XDL8-yzYlU8gFuYAKr7yFgmoIDJvZM3MF1YbHlGbW8BybumNgDqx_-l-6d3U-TtX_Rv_iDhJc1X9svcqQRHYwYkIk6gnKAr-pwtAhTVAPehD99eWDykiEmk9_lnfbHU9sp_TyrkAG2bacinv_7DkfxGX4csQCHT9C2Rx9_LXqJyky_Q-_rH3__Et6rcVoKfij9DuXm-KbgbfvP61c_Z13hoMjBtwljHkR4_PMJKL7P9u3IvpfacDiehz0CfpvoRVl0CbQ3uIZHyEP4DHPulrWAzsB0BK2szbM5pnSMmebCf6A0Tt1a-wMTe2tf3n4-HYP_B3ViYt9Z3zGxr0S_KwtlOi22RVVua8Wrreh7NL3su63GDncajckJqNOvr0zsyWk7GWRi37YdpTZgjwGdRibkF7nZZs3mkfQIBxrGBM6nN2KAfU-armnFRNa-k4M4-skaIPeStRtUQkijShDJ6cur9f45Ll_jIvWsTmdVDMzKpWwkc6CE4KewVAGVQMFIwwgWX9CurxvWPgUayClrT3D0MTtRdwJW8otVAbnfF_c4WcvEvhCFLAQT0lDUU4zkXRsEL8pyW274pj0jgJVppNnJnVphU9Sl5Lysy3I1NoWQhdG70mzkTouSK1n0nexkXfe16nf9ihrBRcWl2BRVteNyXRlVV1upOK8rXektKzkeFNl1Brj2YVhRjBM2hZRFUays6tDGxaOFyP1l4n55RPbs0Cy0ummIWQ-KKX7kSZTs4u5X16oHeLzq2-jnxcYD5t2bn2VXho5SxLSagm1-W9yFQczynkm8NOK_AAAA__9KAP_L">