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

    <tr>
        <th>Summary</th>
        <td>
            Inconsistent concept evaluation
        </td>
    </tr>

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

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

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

<pre>
    This code doesn't compile because of the static_assert when compiled with: `clang++ -std=c++20`
```c++
template <class T>
struct foo {
    using type = T;

    virtual void do_something(type t) = 0;
};

template <class T, class TypeT>
concept IsDoable = requires(T t, TypeT in) {
 t.do_something(in);
};

static_assert(IsDoable<foo<int>, foo<int>::type>);

int main() {
}
```
It generates the following error:
```
<source>:14:1: error: static assertion failed
static_assert(IsDoable<foo<int>, foo<int>::type>);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:14:15: note: because 'IsDoable<foo<int>, foo<int>::type>' evaluated to false
static_assert(IsDoable<foo<int>, foo<int>::type>);
 ^
<source>:9:31: note: because 'in' would be invalid: parameter type 'foo<int>' is an abstract class
concept IsDoable = requires(T t, TypeT in) {
```

But if you insert `static_assert(IsDoable<foo<int>, int>);` above the other static_assert then it does compile.
```c++
template <class T>
struct foo {
    using type = T;

    virtual void do_something(type t) = 0;
};

template <class T, class TypeT>
concept IsDoable = requires(T t, TypeT in) {
 t.do_something(in);
};

static_assert(IsDoable<foo<int>, int>);
static_assert(IsDoable<foo<int>, foo<int>::type>);

int main() {
}
```

I'm using clang version 15.0.7 from the Arch repository. I've also tested it with clang 16.0 on godbolt (https://godbolt.org/z/5G5Pq96c9) where the issue persists.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk1v4zYQ_TX0ZRBBoqyvgw6OHbe59ZD7gpJGFguK1JIju-6hv70gJW9gI92iLYL20CCQSJPDeY_z-EThnDxpxJplzyw7bMRMg7H1j9dfzAn1pjHdtX4bpIPWdAidQacZLwhaM05SITTYitkhmB5oQHAkSLZfhHNoCS4D6tvMDi6SBpbugOVxq4Q-Mf7M-DM8OepYemiXLo9ZHrP4wOKdb4T_dWj5lXCclCAElu5bJZyDN5a-LGOO7NwS9MYAK9b5AACzk_oEdJ181MEHrIPvU87S0iwUnI3soDNfnBmRBulRliGQGK9CdPweXRweVvoIHN_D2rxO-I61NbrFieDVHYxo1ILM4tdZWnSMl28-434JAqlD9m-cKHqAGCZ8B9hdXRgvb1lZuu-NYeleavLQ-B7u-umOpTvPPwxWD6tKTTAKn7u8w-fz35dw6b4SnFCjFYQuyKU3SpmLLw5aa6xP91EcS_fOzLbFBVKy9Q8vpVvUqjtY-EmjoRdec59EPnuB3_707zvQMw9ZG0L_vp0gxou_B6wAPAs1C8IOyEAvlMPPIQ4se_mQVsXSXZr8ASuvjwIuZlYdNAhSn4WSnZ80CStGJLTr2eTFPawCpAOhQTSOrGhpOUj__Pw8yis8n2cC2cPVzCB1sC-Wx39hB2-tsF15DKIxZwwqNzSgfbBG8tYoKTjqzSKj_33vX_S9u_r9h0xztU7Gi3EtaPh6whmt806XZFEcFdBbMwa17Ww7gMXJOEnGXiPwoWcEoZwBQudtQlL4Gq8rJXkUg9FwMl1jFAHj5UA0OU-EHxk_rgORsSfGj78yfsx-yH76WuVt5SlcBrSL0qVzM8LkkTlyq543XZ12VVqJDdZJXpZxWhRxuRnqctt3VbdNyqrhArs8TtKeZ3mT9L1oyyzeyJrHPI1zXiUJT7Zl1BeIRdPgtiyyBBNk2xhHIVWk1Hn08DYBQZ2nWVVtlGhQuXCz4VzjZYHHOPcXHVv7mKdmPjm2jVXA-20VkqSwftWt0Z4Jan_hWXS7eq00ejNbVT9slKRhbqLWjIwf_Wrr62my5mdsifFjwOAYPwaMvwcAAP__eP3bmw">