<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60364>60364</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [libc++] `ranges::sample` implementation is incorrect
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          hewillk
      </td>
    </tr>
</table>

<pre>
    When `__first` is a `forward_iterator`, the following expression is not guaranteed to be well-formed, since `_SampleIterator` is not necessarily an `output_iterator`.

https://github.com/llvm/llvm-project/blob/1d7961fd1a36f0955423362932e1591e7d26ba9d/libcxx/include/__algorithm/sample.h#L66

testcase: https://godbolt.org/z/oEExKoc8W
```cpp
#include <algorithm>
#include <random>
 
int main() {
  auto ints = std::istringstream{"42"};
  auto gen = std::mt19937{std::random_device{}()};
  auto r = std::views::istream<int>(ints);
  std::ranges::sample(std::views::iota(0, 10), r.begin(), 1, gen); // hard error
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUlM2O4zYMx5-GuQgbyJQ_Dz7MTMZA0d562GMgW4ytVpECiZ7M9ukLOZlmdjGXAoJkiOafP4mkdEp29kQ9VM9QHXZ65SXEfqGrde7v3RjMj_77Ql5ALY_Hk42JoZbCJqHz1inEq47maJmi5hChloAvghcSp-BcuFo_C3q_RErJBp_9fGAxrzpqz0RGcBAjiSs59-0U4plM9k_WT7SF_FOfL45-e8h_SHiaKCUdrfsh9IYXVr6s_BllD_IA8uk2L8yXBOoJcAAcZsvLOu6ncAYcnHv7WL5dYviLJgYcRhdGwKEwTVcXJ1NoVZ9kV1UlKlVjp5CKqiuoMViPujNZwI7T-zvgYP3kVkOAw_Go3Ryi5SVHSNtp9gug-qOuP9MxJZ50IlBP4hfSYMbgeB_iDDj8AziE19f338PUfr8L1PI2psvlvoPqTiBAvTwA1OtX9qi9CQ-juC3Wszhr6wFbwE5A83w3C71yENZzEqAOIrHJqOrJJo7Wz4kj6XP-HbFEQITmAOpn5znX02ffMxddpxponv_bulEdDb3ZibJcc7ihfKEXf1Z7s3RND6iMo16s53xEbDN5lnlofI45093zlirA9kvZwBqw3Wq9kFkNX0TcjzR_XNhmydNM_hZN3NIpFh2NoBhDvCejOfySx53plelUp3fUF3VTdm1Ttmq39N1YV9QWRVc1jcJxKttxQtOYSk9YVtjsbI8SlSywK2TRSrVv9Ukq0h2NNcmxNlBKOmvr9rnWc0ntbEor9bVUdblzeiSXPp6C2G8NMa5zglI6mzg93Niy2x6NXPOAz3lUh9yGX1xi7tr8cSbPmu_vgPVTiJEm3q3R9f-7OzfuBDhs6P8GAAD__6mLcRI">