<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/106635>106635</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Enforce std::map and std::unordered_map value_type requirements
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libc++
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
cjdb
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cjdb
</td>
</tr>
</table>
<pre>
Per [[associative.reqmts.general]/8](https://eel.is/c++draft/associative.reqmts.general#8), the requirements placed on a container's `value_type` instead apply to its `key_type` and `mapped_type`. This means that the following should all be rejected by the compiler.
```cpp
std::map<int const, int> K1; // same as volatile
std::map<int, int const> M1; // same as volatile
std::map<int, int&> M2; // (int& as a key is already rejected for overload ambiguity reasons)
std::map<int&&, int> K3;
std::map<int, int&&> M3;
std::map<int, int[]> M4;
std::map<int[n], int> K5;
std::map<int, int[n]> M5;
```
```cpp
std::unordered_map<S const, int> K1; // (int const as a key is already rejected because std::hash<int const> isn't allowed)
std::unordered_map<int, int const> M1; // same as volatile
std::unordered_map<int, int&> K2;
std::unordered_map<int, int&&> K3;
std::unordered_map<int, int[]> M4;
std::unordered_map<int, int[2]> M5;
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVU2P2zgM_TXyhahh01_JwYdJZ3IpFlhg917QFhOrlSVXklPk3y_kuJPOtuMOMIBhA_TjE8n3QJH36myYW1EdBGL_RXYCUVSPCc1hsK6NkaSz8tr-zQ4iqjqQ97ZXFNSFU8ffxuDTMxt2pEX1KPC4Wz67IYTJi-JB4FHgkVmnygs89gIPAg_S0SkIPG6QYbETuBf4EcLA4PjbrByPbIKHSVPPEqwBgt6aQMqwE9h4EHV2IT3z53CdWNQZKOMDkwSaJn2FYEGFBfWVr88YMjKGRpomlj-iKfw7KA8jk_EQBgpLGSertf2uzBn8YGctgbSGLpb3hfvAErrrguvtOCnNLhXZo8ge1ned3Z5-mm4RH2QcUfEw0iSKj8qE2I8PsWtlgiie4FMuigPcpgieRgbycLGagtL8Gsuav5IVT_DXO1gE1gsF_kQhcHf7E3kIvvIVlAfSjkle79M4WQf2wk7bKMHYqfOsQvxP3hof5X316Hp57mMoRHF4Q6FrrW9BRzc_LuhyC10dzOLoeynVm8jND_Y7_NkAf_TDbKyT7Fh-vjH_s-2Lmxw3zLYiHfc0e4bnkwbywwvrFU-gvBHYhGhu-53lrzr9v7z3Wu51vlXQT_jrzLeT1rzfGGEjb9MSm3m4oXYi20Luiz0l3OYNlvu6qZsmGdo-y7Mip7ooM9pRvyvrvCpP2DdllzWS8kS1mGGZ7XCPeZnnTbrvsN9VVUN9s8cOc1FmPJLSqdaXMbXunCjvZ27zrK6LKtHUsfbreteqW7fvuuRdG7M-dPPZizLTygd_5wkqaG6fzMm6_ie7jDQt-_L3U4H78n2xsZPZ6fbljXBWYZi7tLejwGM8df18mJyNXhV4XFqJl8bazaXF_wIAAP__alUGBg">