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

    <tr>
        <th>Summary</th>
        <td>
            extent_v in static_assert not detecting inferred array length with rest argument expansion before use
        </td>
    </tr>

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

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

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

<pre>
    https://godbolt.org/z/c61WhKbaz

The `static_assert` below fails in clang 20.1.0, but passes in gcc 15.1 and msvc 19:

```cpp
#include <stdio.h>
#include <type_traits>

template <int... ArgValues>
struct MyTemplateStruct {
    static constexpr int values[] = {ArgValues...};
};

int main() {
    using ConcreteStruct = MyTemplateStruct<5>;

    // printf("test: %d\n", ConcreteStruct::values[0]);

    // This assertion starts passing if you uncomment the above printf
 static_assert(std::extent_v<decltype(ConcreteStruct::values)> == 1,
 "should detect one element in values member");

    return 0;
}
```

Error message with clang:

```
<source>:15:19: error: static assertion failed due to requirement 'std::extent_v<const int[], 0> == 1': should detect one element in values member
   15 | static_assert(std::extent_v<decltype(ConcreteStruct::values)> == 1,
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:15:67: note: expression evaluates to '0 == 1'
   15 | static_assert(std::extent_v<decltype(ConcreteStruct::values)> == 1,
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
1 error generated.
```

The first template argument to `extent_v` is `const int[]` without the printf, and `const int[1]` with the printf.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVU1v4zYQ_TX0ZbACRVofPuigteNL0VOD9hhQ0lhiIZEqOXLiPfS3F6ScOE62RfdQVDBsWhzOvHnzZqi8171BrFj2lWWHjVposK6aPCnT46ax3aUaiGbPZM3EkYljb7vGjpRY1zNx_MbEsc3T34afGvWN8Zrx-nFAYDn3pEi3T8p7dMRyDg2O9hlOSo8etIF2VKYHwZM04UzsoVkI5mAdd_u2hTRLUlCmg8mfW0h3AUKMwHK-ftp5Dn-F1KYdlw6Byb2nTttkYPLh0xZdZnwipzT56zavCad5VBT3taEkSaB2_a9qXPBq5MktLcHPl8er6S_rC1Z8ZbwGAFhThdYaT_gyO9CG4Ly6iLQCk4dg_-Y5SRJWHJgMHm4LXoeDk9KGiZKJ3bsQi9emh701rcMbAnn4BIvJfRZwv3oMh9fCwey0oVN0LQg9MVkDE1nHsr1hQoQi3AcIhMv6LRHOsgMTu--5fhy0h7XU2ppAiCMfyxlg6xNc7AKLae00oSGgAUE19oyvmHgN93oRpadujY8vhIaezkzuO2zHUEQmyn9AGiA-BHICPykT--CeCeEHu4wddEjYEliDgCNGPNpcywUTTg26yMZ9og5pcQb4rWbvdLiaPThnHUzoveoRnjUNq8g_6zas5d7bxbUYi1WnWfgKEgcMbsLiKqsbraF3sINuQSALDv9YtFsTYKL4Hl9RkUGNqwxDhfk9N0UM9O-JiWSkGbBi_19XLD4hDsse_vzx5284zmPGxhJGrl9mh94HcjFgUYQ-cMtEwe9Y-j_y_uGMI0-M1-mqIejRoFOEXfJZrGFKn7TzBG8TULl-WdvThgH-lk3OQfvw5qOcch5Vbpe1o1_nyz4O7Q_26bsD76yTTVfJbid3aoNVWmRS5nlZ8s1QdcV2d8rzTnBVliqTZal2O3nisjjlbSm3G10JLjJeiG26Fangya7I05Yr2ZaNzLudYFuOk9JjMo7nKdxXG-39glWa8a3IN6NqcPTx4hPC4DPE3dD62WHjqnDoS7P0nm35qD35mxvSNGL1yk9okjtJBHVdmylOP3NC57AD5Zy6wIimp2HlwaGnG-34MisTtdjgyTqExeNmcePHC1jTsDRJaycmjgHT9efL7Ozv2BITx5iJZ-J4TfVcib8CAAD__9_7hjs">