<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/129723>129723</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Using std::hash through <typeindex> does not compile for builtin arithmetic types
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
johnfranklinrickard
</td>
</tr>
</table>
<pre>
As far as I am aware (hope I am not mistaken), this should be valid C++ code.
```
#include <typeindex>
std::size_t test(int i) { return std::hash<int>()(i); }
```
>From the C++ draft http://wg21.link/N4950:
In `[unord.hash]` 2:
> Each header that declares the template hash provides enabled specializations of hash for nullptr_t and all
cv-unqualified arithmetic, enumeration, and pointer types
And in `[type.index.synopsis]` it is mentioned that the header `<typeindex>` also declares the template `std::hash`.
In my opinion the msvc STL has it correctly in this case and the code compiles correctly.
Both libc++ and libstdc++ currently do not work for this code snippet and reject it with `implicit instantiation of undefined template 'std::hash<int>'`.
[Godbolt link](https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIAKwAbKSuADJ4DJgAcj4ARpjEIGakAA6oCoRODB7evnppGY4C4ZExLPGJXLaY9kUMQgRMxAQ5Pn5B1bVZDU0EJdFxCUm2jc2teVUKo30RA%2BVDXACUtqhexMjsHOYAzBHI3lgA1CbbbgQAnimYEViqJ9gmGgCCU%2BggIBkAXpgA%2BgSHBEwUwgEX%2BeEWxwA7BZDsRMAQ1gxDq93ggmAoECc3KD7hBFiDFicYSZIQARDjLWicfy8PwcLSkVCcNzWazI1brTDHMzbHikAiaCnLADWSQAHAA6SEATkkgWl20kGjFGn82zF%2Bk4klpgsZnF4ChAGn5guWcFgMEQKFQLBSdAS5EoaFt9sSADdkCkUj83VxpT8DICpj9VIFpDRaIDiIaILFdbEIk1zpw%2BQnmMRzgB5WLaTAOFO8Z1sQSZhi0ZP03hYWJeYBuMS0Q3cKuYFiGYDiSukfBwhx4N1A3WYVR5ryAgvkQQ1XW0PCxYhJjxYXUEYh4FgTgfEWLpTCk1vt2dGU18AzABQANTwmAA7pmrnS%2BfxBCIxOwpDJBIoVOou7oqgYx6mJY1j6HOhqQMsqApHUTa8KgW5rlgEF4p0eZ1C4DDuJ4bRJMkYSzGUFQgBqBSZAI4x%2BGYyRkXU/REUMGp2Oh3TTJReFoX2Ag9M09GDIkTFsTheTUSMvR8fMAnLAoHIbBIlLUjqXZMhwhyhpIhwsAoHqHL60oSoGQL/BAuCECQ3K8osvACpWiwiiAkiQhKYpcGYkjqoEYqymY/gflSHDaqQG7%2BMadIMipBpGiatmkOaVqrAQKRjo6EDOna9DEFErCbKoYqBAAtGGhzAMgyCHBAq5eAwwpWSE%2BBEEhejPsIojiB%2BzXfmour/qQN4LikBYKRwNKkGF8GcJmY5Jf8qBUGpRVaTpekGUwQbGR4LoZRZSzWaaywIJgTBYIkqH%2BYFwWhbqEW2FFNlaHZpCijyErbNs0rSpCPLStRkgqlw/iahw2xKeF%2BrRfdsWWnFEBIGlropXDGUgOezApBiqAEHwdBRjGcZdmmSYTgTGbZrm%2BbNqQRaMAQpblrq1a1vWtCNhOWBtkYnYMj2LEDk2DLDqO44U6C05drO86LhgmwMqu66bgkO5KPu7MdhEoAxVQZ6Xted4PhOzWvm14ayJ1v4MroySAcYrKWGBsQoVBMFZHBjKIXgyHwNJNQsc4ECuOxVQEaU/H5Ok5HZMJfhVLRWQScRkze1x9RCbkUecXUPEzMHkl6FMvQB2JvGESHSwrGscml/5I1jXqqm5QVRUlWVFXEFVNXlaZDXbbVd1Co9EiSBKQSqvKXBipCKqSG5wRnbwF2jVdYOGsavdmlDSAJdNCM2ulCRZWwnD14VGlN%2BVlXVbVmD1SQ7tNbIhvvsbX5KF1f7DH1TADc2Q3V4vHCTYlMchxZpqTysfYqpUz6twvuVDau9iAWTMD3PapADpHSGKdLUc8AiXWUkvW6KCnpmAlNKLgGhSFcD9JCN6bkNT%2BWBgvPBHBdoxWhuva0m0HQUFSjvV0KArZ/GgcKLGkYEi43jImDMRNJFZhzOhCcVMSxlgrFzTANY6wNibHyNmh5pZVjwL2RwvMhwjmQGOTYfIRb%2BQZOLBcGYlx6P5GuDcFMtyKz3AeDmasTyayYOeK8t57yMH1vfVqj9PzyBfmbHQIBtj6HbCgG2NhxYO0ZE7AQTZ8qvHFicUkKSCDoGAlYSw8E3Ye0gunLImFsKpz0EHOY8dUhhzqAXGOxRi45wTl0biKdcJdJ9sncSHTGl5zGJHXO0w44LGkrJd8P8QbjTrmAoq%2Bx2xQLbhCEy18EE7B2uDPuopJD%2BAlGPMw0px6BDcpQsUNzAbnRwYw0GzCborxPNDDeU1krcMRnvbKh9lkaVWUYdZF9eBXzMo1KoBswkDwiabbqsTer9UGoDX%2BTCAHTWAXNI%2BKyrYgvbhAOBroLLbGQbZfah1jqUCGvckKjzFmRVeeS/ubkSH%2BEkFPbYGgNA8lVJCDQcT6ELNriw%2B6Q0zDCuuqvZYW4MjOEkEAA%3D%3D%3D)
I only checked it for `<typeindex>`, but this could affect more headers where `std::hash` is supposed to be defined as mentioned in [cppreference](https://en.cppreference.com/w/cpp/utility/hash).
Under the assumption that this is correct C++, would it be possible to fix these includes for the LLVM standard library?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0V1mzsrgW_TV8L1SfAsTp4TyEGQGVScWXWwEiRIYAAVF__S3wfN19u_pWUecUyd4re5KsBSnFWY3QN7OUmKXyCw59TrrvO8nrWwfrosR1h5MCdumvmKSvb0DZG-xYSFmThRULR9ghlhE2OWnQZ6kmPVth2sMC1YywZQSZ7XNMWZqToUzZGLEPWOKUlRlBYgSJTUiKvhgOTM-K-3k4wAgLXCflkCKWWcj9q0G4TtGTWagMB2ifMgvALADFb_Sfnu0R7Rlhg-uexYywZZm1xHaoH7qa_dM0hzRnFjKu-wlD2MyxbSZzZiGxzFr5ZwAc0DpSsX2O_ow17eCtZ_O-byZMQWMEbcwE_qvEdcEI2l7cLrlphwNmzU4wS2moSZd-zYcvFWbFscLHYHoWKqvCJGdzBFPUsX0OezZFSQk7ROdze1Q1JewRO_mzTUceOEWURTWMS5SytEEJhiV-wx6TmrLk9jG8kY6th7Js-u4_PQvrlIVlyXAgefwx1O0AS3zDKGVhh_u8Qj1OpiaheqhQNyNNr5NXQ3DdT4G9GkQ_MYM6ZfHv3Kb1r7ktX_RVk4Zi-pMk7llM2QrVExxKP6lNGf2kOvn_o6srjoUlJf-nAMyK-99OrrifoTFrtnqxpME1JvXsVNFHwvqBPRVjiiQhXYeSvnxNkc-zmECK5gwn82kA2YRUDS4R_ct4gpdIn7MljpOf_k8uJY5pn_5eSYauQ_WEnZJ59EfSFXMDPgdN2LTGTYM-jejQHSX9FNWI-3xKC1dNiZOpYDXtYd3juQVTL4c6RTc8l-_PMgjr_zfQ679KwiwlnaQxKXt2nsylMv1C-76hf45t9tn_Il02LyzezAIcIjvLgSa16dKVnyAaj5HkyJXkpZINNN6VEwCPqgyc9yj1DlgDd9R6x5VewMu2Vu9GKnhRHHPuBcjPjSQBi0h1AEAIjGYEzgNoUeD3u4xXTNAAOQLuEA1Fub2CYFSsewp0LeyBJVLdBNYIYssfgLITlV0GkrsIvOaumjosAFgRmXgHRVqjR900eiTK4lV92kd9d7FhtC1Cx8085wnc5bFeSnx8uiohp-5S7SmHlXBPhB6dQossOA8wwlKQTsoFyGHf5ujp3KlxiMBbMsxFmQFejuM4c0GNq0g94Xa3zSo9k-Vw9ssyUyrApck-MJlvSOoYjpl6md-Ren6OYC1dFeo5wOWzp9JuF1lWAaLKycJS1rmkYUXDSeRfTRd4yt0-4-T22hzHxPaLk5zs32f4Nvm4CxTDeccGLgCGcm0D5ey7wABg5asgKIrsXApcod81vd4Ib20-vhCLssnotdZEOQd6vcyGc6JljupammtLfgr8pUqg1m-pD5S0kIvwvlmcnk2wUUy5uW9PptYoHjQVbELT1tJYNQv-3YwzultXjvfOpOXZhgE4aIfNlaeuf80xdz1yizw671AkDY7PuYvEGiIN65GC_aG4SWP-FPc8WJyjk7fsXiB7FK7LX87cUX5G-e7-jC6hGuWilgXZTT3bTSAX_KMXUj3kN-ANJBfsg7ECYN1UXe3P4dyekmw-D2Oj7CSTnA5kWJM2i56rahfx95VxyFvXoS1ojDCAGys7L7syUzWx4dCVl0VFGXZi7O2cIvLfeqi5mdRK_hWY4nOG16OXV1xCRtA8NXT0RjjkiyDYeUgjFwFkW4fb6opZBBoNchSEvvPwNjcH1DYghhlLZmmH9_ZydfIxf-WNmY8UEKM17BVHfKK7NiNoEhhkVXYX1obQB5CbMx4xBgV2cytqEj0q7i1Ro_ZVRdPv91b6hgJbV1_P8TkwNR3cSI2OYV8VB3hqO-Ba3p2sVOVQw62iamonxxaJWgmAXtfzN3Cyl2xIoF0iMI7N2VdnKElVc3Q_UpPcsTSvvC-3igwdI2ituxdtXEiR5Y17q9C1jZ7sqmi5u21aKdQb7wSDBhV6OLqx7ok2uXpX_32G8DWauyyQIrNojRkz0sZzHrfqWdC0fQmNayPj-0vt4j3lOr-Rj7bfe0XWliMjaBjmo_C00GeuO--W0vO51lTJ1MuONBdFD7MDeoNGwi1QjTGVvLueXNOq8qMgC_T42lWza7xvXQ86wG3ismt5yD_OvbzPD2epL6I6cu6CrSqFoNhKexDFcCVzy7Q7bFZ2nlWj0w6rVZwVh6V1HNZOmqsEPE_udXXpUSoe88P7_Kh4Eb52_EN0OvLyQRJ11lmXqEtOkqNdDelumZfsZYz73d6liajKw-F5clU4TZaxPBRL4-rsbvnJ9s6un3jFG_HPrSfHRYiSS3hU345RlCvNebiSsHvoqm_4Y6fTpCoZQVua_P3SttXSPXlheT5pF1U77S8lvCqXOD6lvEy2KvYly_Xbh3WRcCNbra8vR6-OR024n9LooFP4SKtS8cEu3cuOMJSydz2PtcKLJ73cfz6X5eUUnyqF9911v4_N_PGg8WVpafxtrRh8AJREcBcn8WHIQVQ6Sf68Nm3woreobcL3qh8fw0mBwxaDc-AoiyNsgNIYvm6ldphsAL6cw-JxXlly3VSg3Ft2pue-lijbnbxfxcU-mKM4S9njKBlSSp7nfHhAruIMN9T8--PEWaC7MoKmZ4ll60WkYnFxNyvF8fY77Zq_D7mcnBz_WWad9g7APlqNexwbr32VL5vr6T7agjc-nHy8V65-CKKb6cWfj971YEuJHpXP1XGpD0qiOf3Lei8AUipIgxd8RQdkbfrl-uUY_ON2au_b4_sl3arYcE2pv6-MWM50YZ8_owN3VdfADa6b9mFoOAkLy5cVooMy8seNuogQlw21bVYatZo3pxqHaJOGef5uwUU_PD0sLseg5GJspcku3W1pnfhGoJfLt74zLgduFEVbL7pdujlu3PgedBUg7ZzFU3i6dpzL6ovfqOpaEgblOJBmp8y7oNSPzsg1z5WkJI1Lw_0bxLU3RiOnv-WYdM_jXlFQyBdd4nj1I7bybVnA0zmM0qu2RdLl7RDeIhIdC2XEMI5bGqBuG-pE-dyLgQyM4Awue3N-tV5dlD3iHBykjth2rLvx9QZz_t6Gsv5ICuv-1irvhJDPCNoQF_7nC6IW2jGO9GwPNuVpJytuEqxUe9_hz_20crm3Ig9D-7hGZ9G5H9RCBdM9vVD-_mf7wyJZUpcvNslRUqB04mcTh_tXmjqx43jofxO8SdTA221idRXpfjNcyo456v6Vt07MmA5NQ-jE7MikiH7zPPh3zjzR7KWUNE2HbqhDdYL-jcih-uvvJl8JqSZVwgha0jRTvXpc4v7FCNp8vLD94Yhh_ZEciIWUDlXTf9gz_MkL_8mEf4ufKe1xzhb3U8wNoRTHJZpSuOHnBEUR-6PZ6A8FRqxtnxx2IrYp7Gby3MHuxSy0X-n3It0utvAX-ubXIs9z_Jrf_Mq_eTEVV1C8LRarNbdarNabGxRXN57bLrdxsk5_4W-BE5bcghP5pcAvxS-O26SI5xHPJeIGIYEROVRBXH6V5aOaGO4vTOmAvnlhuxYWv0oYo5LOglcQajSy8y4jCJP-7b4npz_iIaOMyJWY9vQvmB73JfoOKa6z_9WVbJ93ZMjyf0pVNiWIzrLgR1_MZYkHXPa4_pv--iisX0NXfv-DpuM-H-Kfpk5x_Pz7o-nIJCSmu3GKnjKC9pPe41v4bwAAAP__5SYvYg">