Sirraide wrote:

Regarding #84712: From what I can tell, the behaviour of cases such as
```c++
enum e1 { a };
enum e2 { b = a };
```
has changed between C++11 and C++14 (at least the wording is different starting 
with C++14; there may be some other section that states the same for C++11, but 
I couldn’t find one); specifically, C++11’s 
[[dcl.enum]p5](https://eel.is/c++draft/enum#dcl.enum-5) states that:
> If the underlying type is not fixed, the type of each enumerator is the type
of its initializing value:
> - If an initializer is specified for an enumerator, the initializing value 
> **has the same type as the expression**
and the constant-expression shall be an integral constant expression (5.19)

Whereas in C++14, that same section reads:
> If the underlying type is not fixed, the type of each enumerator prior
to the closing brace is determined as follows:
> - If an initializer is specified for an enumerator, the constant-expression 
> shall be an integral constant
expression (5.20). **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**.

That is, not only is the type of `b` above not `e2` before the closing brace, 
but it would seem that its type is supposed to be `e1` before C++14, and 
whatever the underlying type of `e1` is starting with C++14.

https://github.com/llvm/llvm-project/pull/84068
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to