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

    <tr>
        <th>Summary</th>
        <td>
            `std::bitset` has non-conforming member typedefs `size_type`, `difference_type`, and `const_reference`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Due to the presence of non-conforming member typedef-names in `std::bitset`, the following program fails to compile in libc++ (while it compiles successfully in libstdc++ and MSVC):

https://godbolt.org/z/4EGY13eah

```cpp
#include <bitset>

struct MyBase {
  using const_reference = const int&;
  using size_type = unsigned;
  using difference_type = int;
};

struct MyDerived : MyBase, std::bitset<42> {};

int main() {
  MyDerived::const_reference r{};
  MyDerived::size_type s{};
  MyDerived::difference_type d{};
}
```

#### Affected Lines:

https://github.com/llvm/llvm-project/blob/e3dafa88a8f651825ac65aad9b273983598279dd/libcxx/include/bitset#L170-L174

https://github.com/llvm/llvm-project/blob/e3dafa88a8f651825ac65aad9b273983598279dd/libcxx/include/bitset#L433-L436

https://github.com/llvm/llvm-project/blob/e3dafa88a8f651825ac65aad9b273983598279dd/libcxx/include/bitset#L550-L553

https://github.com/llvm/llvm-project/blob/e3dafa88a8f651825ac65aad9b273983598279dd/libcxx/include/bitset#L622


#### Proposed Solution:

To fix this, we should either uglify or remove the non-conforming typedefs:
- uglify `const_reference` as `__const_reference`;
- remove `size_type` and `difference_type` typedefs: 
 - `difference_type` is not used at all and thus can be safely removed.
  - `size_type` is a synonym of `size_t` and can be replaced by `size_t`. 

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVU1v4zYQ_TX0ZWBDGurzoEMSx71kgQJbFOgpoMSRxYIiDZJK4v31BWXZcZzdBXoLQMAW5_HxzRdHeK_2hqhh-T3LtysxhcG65lUZQw6zfNVaeWy2E0GwEAaCgyNPpiOwPRhr1p01vXWjMnsYaWzJQTgeSFK_NmIkD8oAKxIfJON3jN-1KngKrEgYPsx8vdXavsbjB2f3TozQC6V9vK6z40FpihRatR3De4b3wLB6HebtcEZ48FPXkff9pPVxwfsgz0eEkfDt-98PDOuoIolrCOHg4xfuGO72VrZWh411e4a7Hwx32eMf_6ScxHCCR8Xz6g6H-IlcmU5PkoDxh8Up_njC-uCmLsC3473wBKy8Z8kdwOSjk501Pjw76snNUWR8e9oDZQLDgvFrtFc_6DnGc8ZNZs6V_IiRql_I3pGRawaxcrv8uZK1JadeSALjd4vImIzbFPGHDBl_nPVfsSgTYBTKMKwY1hfvLqwnjls33TXLJ_S7m_63uFtX5Qdt5fY6T0vakF8W3PU9dYEkPClD_leVoMIwtZvOjgx3Wr-cf9YHZ_-lLjDctdq2DHfEpehFVYmqL_K0wlx0RS6ErFsseV3xvK6wrKWMBKrt3t4Y7paiiSSnKCN_Sstk_ZSW2ddQk3G-fsp48TXU5Hmyfspz_jXUFIhLWd1U1p_OHqwnCd-tnoKy5lJcf1no1RuEQfnYZK8EfrCTlkAqDORg2mvVH8E6cDTaF5rfxJt3dXlQl4pdn8_Ex-hjm7EiAeGj4fn5s-nUJuvzRfFVPvfdfNDIuHfTY9FydT_Etlz_Aqc8GBtgioEQAYTWM2kYJg-dMNASeNGTPi4S5GZu8vUnKcqDAH801hzHOGcu9rPOhc3RQYuOJLTHD5hNlLmSDZc1r8WKmrTkeZ2XZVGuhiat07SssiKhFlNsqwLTNO9RoMw4l3m2Ug0mmCdpkiWINZabOhGZTLu-4jLvuqxlWUKjUHoTyy3OjJXyfqImxbRIq5UWLWk_T1REQ68wWxliHLCumWu0nfaeZYlWPvh3mqCCpuan8xIG4X8_cP1tHGPB_TRT0bCk-3OZrCanm__dabOLnuFuicFLg_8FAAD__15ynDo">