https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113638

            Bug ID: 113638
           Summary: Array bounds of variable templates are not correctly
                    deduced from initializers since GCC13
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Keywords: accepts-invalid, rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: de34 at live dot cn
  Target Milestone: ---

The following code snippet is incorrectly processed since C++13.

Godbolt link: https://godbolt.org/z/xjEqnqodj

```
#include <type_traits>

template<int ...Is>
constexpr int my_array[]{Is...};

static_assert(std::is_same_v<decltype(my_array<1, 2, 3, 4, 5>), const int[5]>);
// rejected since GCC13
static_assert(sizeof(my_array<1, 2, 3, 4, 5>) == sizeof(int) * 5); // rejected
since GCC13

static_assert(std::is_same_v<decltype(my_array<1, 2, 3, 4, 5>), const int[]>);
// passes since GCC13, but should not
```

It seems that GCC gives up deducing the array bounds from initializers of
variable templates since GCC13.

Reply via email to