<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/125441>125441</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang fails to compile when using `std::tuple_size_v<T>` in concept, but compiles with `std::tuple_size<T>::value`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Taw3e8
</td>
</tr>
</table>
<pre>
Clang (and other compilers too) compile when this code uses `::value` but fail to compile when `_v` is used:
```cpp
template<typename T>
concept check1 = requires {
[]<std::size_t... Is>(std::index_sequence<Is...>) requires requires {
(std::get<Is>(std::declval<T>()), ...);
} {}(std::make_index_sequence<std::tuple_size<T>::value>{}); // diff
};
template<typename T>
concept check2 = requires {
[]<std::size_t... Is>(std::index_sequence<Is...>) requires requires {
(std::get<Is>(std::declval<T>()), ...);
} {}(std::make_index_sequence<std::tuple_size_v<T>>{}); // diff
};
int main() {
auto _ = check1<int>; // this is fine
auto _ = check2<int>; // this not
}
```
Is this behaviour correct?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsVM1u4ywUfZrrDapFwHbshRdp0kjddx9hfB3zFYNrIP06Tz_CTtJMf2bmAcZCsgSccw8H7hHOqaNBrCG_h3yXiOB7O9VP4pVjmTS2fau3WpgjAVYK0xLre5yItMOoNE6OeGuBVZcJ8tqjIb5XjkjbIgkOHYGCAt8A35yEDggFJU3wpBNKE29_RUJBD6e4Q7mIbSOOzqOgy5DjCHTjcRi18Ah8699GNGJA8gT8AehGWiNx9ET2KJ9XBPiOTPgS1BSVrO9numo5LPCt8-2izakfePBpmpJHF4lYeV1SpsX_Dw5fAhoZSz66NE3nTdU79xdFaHVLc0Q_Yz-wtyj1SWjg26dlBVg1jy2JVVgF_MK33s3k690tfhDPePgk8brsw6jxEE93qXBzFfzhwherkMsHbA9sT1rVdbHyeneR8Ne-s3--X30_nK7Of233HzwHulHGk0Eos6h8P6kI3pLD7PXy3IFvlfFzrfsL5dyNypFOGQS6IR9B7FuQsf6s5aYBF0WPbtnSYC9OyoYYCdOE0gPfJ23N24pXIsF6teZlnlHGs6SvmxwlLdcFz7jIy7KsuoLTosGOll3FcJ2omlGWU0YZ4znlWVpmXVexVS7kqumKgkJGcRBKp1qfhtROx0Q5F7BesTzLVokWDWo3RxljMsYWMBZTbaoj4K4JRwcZ1cp5907hldd4TrmYSu5TLAWnYgIW9LfXG2PLkHMfxHcUY-7M48ir8v03FF90ZkGTMOm69350cX6-laPyfWhSaQdg-yj__LsbJ_tf9J7tZzscsP3ZkVPNfgYAAP__5qS5-Q">