stbergmann wrote:

This change started to break the following C++26 code:
```
$ cat test.cc
enum E1 { E11 };
enum E2 {
    E21 = E11,
    E22 = 1,
    E23 = E21 + E22
};
```
```
clang++ -std=c++26 -fsyntax-only test.cc
test.cc:5:15: error: invalid arithmetic between different enumeration types 
('E1' and 'E2')
    5 |     E23 = E21 + E22
      |           ~~~ ^ ~~~
1 error generated.
```
as within the definition of enum `E2` with unfixed underlying type, while the 
type of `E21` is indeed `E1`, the type of `E22` there is `int` rather than `E2` 
(see [dcl.enum]/5.1 "If an initializer is specified for an enumerator, the 
constant-expression shall be an integral constant expression (7.7). If the 
expression has unscoped enumeration type, the enumerator has the underlying 
type of that enumeration type, otherwise it has the same type as the 
expression.")
https://github.com/llvm/llvm-project/pull/81418
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to