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

    <tr>
        <th>Summary</th>
        <td>
            [libcxx] std::normal_distribution may need a static assertion
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          GuF-veg
      </td>
    </tr>
</table>

<pre>
    Consider this code:
![1](https://github.com/llvm/llvm-project/assets/54523006/a7b2e2e9-549c-42b5-98b4-62a4234bcca1)
Using clang + llvm + libc++ toolchain (version: 17.0.6), this code will compile successfully.
But it will lead to runtime errors:
![2](https://github.com/llvm/llvm-project/assets/54523006/58667996-fc88-475b-bd83-a1692b324521)
![3](https://github.com/llvm/llvm-project/assets/54523006/af8d4540-fdca-4615-8e8e-1bd7d702b978)
Refer to cppreference, the template parameter of std::normal_distribution must be a float point type. In another word, it must be float, double or long double, otherwise it will lead to a **Undefined Behaviour**.
I compile this code with GCC-13.2.0, it will arise a compilation error:
![5](https://github.com/llvm/llvm-project/assets/54523006/52e07d42-0223-4abb-8a72-85168c576e14)
The reason is that there is a **static_assert** in GCC STL library random.h:
![6](https://github.com/llvm/llvm-project/assets/54523006/d8428fad-e352-41ff-8e8d-8d7e91870e98)
But there isn't a static_assert in LLVM Libc++ library normal_distribution.h:
![4](https://github.com/llvm/llvm-project/assets/54523006/0b075214-9ebf-492e-8816-c7e888a17877)
So I think it may be a good idea to add a static assertion in LLVM library, in this way we can avoid a lot of latent errors.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyslc1u5DYMx59GcyFk2LRlyYc55ANZLJBeuru9LmSJHqv1SANJTnbevpAnybTZBYoCOVmWTNI_8k9Kp-QOnmjPxC0T9zu95jnE_af1gT_RYTcGe97fBZ-cpQh5dglMsMTaG1bfs_qGYcPEbcPEPUM153xK5QgfGD4cXJ7XsTLhyPBhWZ5eH_wUw59kMsMHnRLlxPBBdALbuu7LnhyRkAYuusHwDkfBBzV2vEfdYduNxuiG4XAJ_y05fwCzaH8AhrdQ_F8WbjQMb8syh7CYWTsPDNUTxeSCZ-0NNLKqq764wrsrGTy7ZQETjie3EKTVGEppWpflXF1C3q4ZXL58tpC2kAPE1Wd3JKAYQ0zvkoMfmByh-l4OQ88noxTvpBj5aFXLddMPOLbYCbwm5xK-_cjaTMp2oqv5ZI3mXd8IrkgRb0YrraxxHKR6C_87TUUyAczpFMuavKFLrgkyHU-LzgQnHfWRMkUIE6Rsyy-2Nz7Eo16-W5dydOOaXfBwXFOGkUDDtASd4RScz5DPJ6rgswftQ54pwnOItkRx-c1i-77s2bCOC0GIsAR_eHktB5vps0v0U2k1MLxhePPNW5qcJwu3NOsnF9Z4OXiRxec3zfxTSnmGT3d3vGkrrOqXv9rc61iC6RcjvQFu6nknHvGR4kGqpe2Q14gt7_Q4cqUlciWaXhkhe2q6t-p9nQki6RQ8uAR51rnULVJ5e81Jyjo7873EivmyBc4XYvjy9bH0YNTxDFF7G47V_A6t_0A0qzpUk7acWoG8a6apCNNyZSUNjZI1DVdhlg5-ZfEMZQYN_0IpEI-Pf_wGj9cp8grzC2X-RNZ9IFk91lJg0_GBxol3AxJXqum5kaSU0o1UUr6RfQnwuejP_7XJX58v_XIIwYKzpDdBW_vGCxfeIr5X5BfOTav-ouVnfYZnAqM96KfgivkScunX0sE-v4y9amf3rR3aQe9o38ga1dAPPe7m_WBsJ4xEOY112wxqwra2ou5F23ZKmnrn9lhj22Cjmlr0NVaq0UbRJHqcptEoYl1NR-2WqmSsCvGwcymttJdCKtwteqQlbTcY4nXyMyyjdxf3W5rH9ZBYVy8u5XR1k11etruvmP34wcT9fwwhfQZP9KsU7ta47P93zTeOUvMN5e8AAAD__31bVvs">