<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62332>62332</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
std::variant<bool, int> selects the wrong type when passed a std::vector<bool>::reference
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davidben
</td>
</tr>
</table>
<pre>
I ran into this trying to switch Chromium from `absl::variant` to `std::variant`. This code should, as I understand, return zero in both cases:
```
#include <cstddef>
#include <variant>
#include <vector>
using Variant = std::variant<bool, int>;
size_t ShouldReturnZero() {
return Variant(true).index();
}
size_t ShouldReturnZero2() {
std::vector<bool> vec(1, true);
return Variant(vec[0]).index();
}
```
Skimming godbolt output, they both return zero in libstdc++, but libc++'s `std::variant` selects `int` instead of `bool`: https://godbolt.org/z/3cvqPh4Go
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVE1v2zgQ_TXUZRBDIfXlgw6xHS9yW2wWe9hLQYpjiy1FuuTQqfPrC0l2XLgJUoCg4fl6856eJGM0e4fYsnLFyk0mE_U-tFoejVboMuX1qX2CIB0YRx6oNxEonIzbA3mIL4a6HtZ98INJA-yCH4BVuVTRMvHAxMNRBiMdsSof61mVR9K3mQX8O47tvEaIvU9WM74GGeEJktMYIkk3hQJSCg5eMXgwDpSnHjoZMY4T8w3LL3eVn8_8lwvjOps0AhPrLpLWuGPi8b3sZasPstiRD9fkdKc4qvHf3AhMbOA3jmKtvLcjBTPPFqtfJ0Tzil8Inifu_0wk_8fgGW8YXwKrz8UAcJHgjMZ4QyEh48uFcRp_zB3X6fXmD2D4ezhXCmfKMwPxCEfsGG_uRzJn7De8dxcc68tVzsrN52vePLfpfv5mhmFUeO-18pbAJzokmvB7PM0uuHGGNSqS7hhfTWcNKtEYfIvU8QMvQkSLHU1pM0eMi4RSg9-NwUmGKmfiAXqiw2Q9vmV8e15v4cOe8e0r41vRHb__3Rd_-Uy3Qi_FUmbY3lcNF2VdlE3Wt2XFi6aSYqmUUkVV87oo6q4ssenyplBNZlqec5EXvLivRV42i5qLnd6pplK6qmu1ZEWOgzR2Ye1xGLEzE2PCtuJC8MxKhTZeXu7QjkV3Ku0jK3JrIsVrGxmy2H7q3Dd9qEd4CX78DpwOCC89OjjIGFGD_Ng9czTgDgO6DrMUbHsjo6E-qUXnB8a343bnn7tD8F-xI8a3E8PI-HYi-TMAAP__Nch0HA">