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

--- Comment #3 from Boris Staletic <boris.staletic at protonmail dot com> ---
> Please next time attach or place inline the testcases rather than just 
> linking against godbolt.

Noted.

I managed to reproduce these compile time errors without any standard library
headers:

```
struct array { int arr[3]; };
struct view {
    const char* p;
    unsigned long long size;
    constexpr view(const char* str) : p(str), size(3) {}
};
struct T {
    int mem1;
    char mem2;
    view mem3;
    constexpr T(int a, char b, view c) : mem1(a), mem2(b), mem3(c) {}
};

template<unsigned long long I>
constexpr auto get(T t) { 
    if constexpr (I == 0) return t.mem1;
    else if constexpr (I == 1) return t.mem2;
    else return t.mem3;
 }

namespace std {
template<typename T> struct tuple_size;
template<> struct tuple_size<T> { static constexpr unsigned long long value =
3; };
template<unsigned long long I, typename T> struct tuple_element;
template<> struct tuple_element<0, T> { using type = int; };
template<> struct tuple_element<1, T> { using type = char; };
template<> struct tuple_element<2, T> { using type = view; };
}  // namespace std

int main() {
    template for (constexpr auto I : array{1, 2, 3}) { /* ... */ }
    template for (constexpr auto I : T{1, '2', "asdasd"}) { /* ... */ }
}
```

The errors look like this:

```
<source>: In function 'int main()':
<source>:31:38: error: '<anonymous>' is not a constant expression
   31 |     template for (constexpr auto I : array{1, 2, 3}) { /* ... */ }
      |                                      ^~~~~~~~~~~~~~
<source>:32:71: error: the value of '<anonymous>' is not usable in a constant
expression
   32 |     template for (constexpr auto I : T{1, '2', "asdasd"}) { /* ... */ }
      |                                                                       ^
<source>:32:71: note: '<anonymous>' was not declared 'constexpr'
<source>:32:71: error: modification of '<anonymous>' from outside current
evaluation is not a constant expression
```

Reply via email to