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

    <tr>
        <th>Summary</th>
        <td>
            [libc++] `std::counting_semaphore<-1>` should be rejected
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          frederick-vs-ja
      </td>
    </tr>
</table>

<pre>
    According to [[thread.sema.cnt]/2](https://eel.is/c++draft/thread.sema.cnt#2), the following program is ill-formed and thus shouldn't compile.

```C++
#include <semaphore>

int main()
{
 std::counting_semaphore<-1> sm [[maybe_unused]] {-1}; // negative least_max_value
}
```

But currently libc++ accepts it ([Godbolt link](https://godbolt.org/z/vMcoK5sss)).

A similar issue has been reported for MSVC STL (microsoft/STL#3746).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMU0tvuzgQ_zTDZRRkbB7JgUNI_uxh21OrvUbGHsCtwZFtstv99CtIqnarPayEsGTP4_eYkSGYYSaqoWigOCdyiaPzde9JkzfqfXcLuzeZdE5_1EelnNdmHjA63OKbOHqSOg00yVTNEYoz8JZvx36M8RpAHIG3wFsim5oAvFXAG-CN9rKPwNufFbjgwA_ATxhHwt5Z6_5cW169G7yc0AQ01u565yfSKGeNcVwChtEtVs_Aq4jKTVdjKQV2BnZ8_Et2_0739o9bLsys7KIJQZxWDNfReQLx63uumSNO0szA9yu0-0v1KIEh6pWkOCq3zNHMw-VbndMuA_ELw_TQa5IfHV2WeQmkV5WKM0LV7DKoziAavEuFMw0ymhuhJRniZZJ_XW7SLvTZ-vyD03ewzRJRLd7THO0HWtM99EapFF1jQBNxJVI0vzndORvRmvn9vxwb7u-p8wPw9m_g7e1Zud-LEMLm0OFfAh8xmMlY6dGEsBCOMmBHNKOnq_ORNPbO4_PLHyd8eX1aIUxGeRfcNgUvr0_Ahajycq2b6FrogzjIhOqs3Jcsy9meJWPdqULkB-pzrTPOdaUPqtx3jETey54JlZiaMy5YyUqWZXnO0r7ID2xfUUZVycpSQc5oksam1t6mlVqywa1LkYkssbIjGz53wddr0K5bhgA5sybE8JUWTbTb1nxJvLlZsv8xEFCyx8RiR-jpjVQknSze1j88MHFculS5CXi79n4cu6t3axLwdsO_LtZG4Z8AAAD__6FHKDo">