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

    <tr>
        <th>Summary</th>
        <td>
            Clang crashes with requires expression in lambda in concept constraints
        </td>
    </tr>

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

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

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

<pre>
    https://godbolt.org/z/Kvr6afWd4
```c++
template<typename T> concept doesnt_matter = true;

template<class T>
concept test = 
    []{
        return requires(T t) {
            { t } -> doesnt_matter;
        };
 }();

static_assert(test<int>);
```

It is reduced from https://godbolt.org/z/5K6janbx5

```c++
#include <concepts>
#include <type_traits>
#include <utility>
#include <tuple>

template<class T>
concept tuple_like = 
    [] <std::size_t...I> (std::index_sequence<I...>) {
        return ((requires(T t) {
                    { std::get<I>(t) } -> std::convertible_to<std::tuple_element_t<I, T>&>;
                }) && ...);
    } (std::make_index_sequence<std::tuple_size_v<T>>{});

static_assert(tuple_like<std::tuple<int>>);
```

Both were accepted by Clang 15 and earlier. Clang 16 and current trunk on CompilerExplorer crashes on them(with either libc++ or libstdc++), but accepts the second if `std::tuple_element_t<I, T>&` is replaced with `int&`.

GCC also has this issue on the second example only: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105644.

MSVC accepts them.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVclu4zgQ_Rr6UoggUTYtH3xI7HgQNOY0jZmjQFEViR2KVJOlbF8_oCQvibvRMQTbKrK2916RMgTdWMQtW92x1X4hB2qd31rZWS2fF5Wr37YtUR9Yfsv4gfFD4-rKGUqcbxg_vDN--PbshXz8r16ydM_SWybS6VGM38VntBJ2vZGELN_RW49WdgjfWX4PylmFPUHtMFgqO0mEHli-B_IDsnz2v4qijAxhDDEtHeMQBhrdJzMAwNQbW9-dTfHjkQZvwePPQXsMjBffgRjfwNXOMcj6DgjYeg83sewP5Z6qPG_en23xhReMbz41E0iSVqUMAT0xXsTKWb7TlmJTl9uPiF56PxDoAB7rQWENj9518CeiVt_ED2mr19VlnF_TxXiurTJDjRCxnrANJ7A_LkdCS_JS_3bHQNpoevud_9AbPK99menoVhr9hL_kO0YOVEc88tug37GkJEkeInmMF6cVbWt8LQP-HNCqmO4hSZKJgGshzJIZ6Sy-KJxLAZ2yNhipfhjzFLPvrKzTHuXsM3rSlcGS3GU3U-dosENL5RSJ7yaIuIjfnwV5KcyYjAvGBcROL3Q2b_gATyefsLzC6FMlI7rPLN-NFeT3EYcx0Z8Uf2LwKuZ5EL4wC3eOWnhBjyBVlAbWUL3BzkjbQLYCaWtA6Y1GnxytYrSqwXu0FI8a-wTOws51vTbo71974zx6UF6GFkNcoxY7xosXTS2gphY9GF3NYwNufAtUH-eIbyIn1UBzUSEGgIDK2Rr0IzCRfpVQkU6z3hsZh32sgIk0AjSuJpdg_LXbgTTBQStjSh1AhzDg3MGxAHyVXW-i1byx_Pbz2aFU0thhPjuqoXnXxkjGD6F1L2U1NIlqNMsPumb5PktXYrn8UMPf__y7u2y7Sxb1Nq83-UYucJuJTbbO-EaIRbtNCyU3KWYFqo3IVtkaZbVerhDzx1Uh1-lCb3nK87TIsjTNRCqSHAusilWmijoTj5uKLVPspDaJMc9dLHkxNrwVS5GuF0ZWaMJ4v3Fu8WVCg3Eerzu_jT431dAEtkyNDhTOUUiTwe2kl6MMRuiPgw_42nsMQTsL2oKRXVXL-O94QilnQzwXLYXF4M3nm1RTO1SJch3jh5h1_rnpvfuBihg_jLUGxg9jL_8HAAD__8ffQm0">