[Issue 23988] New: Conditional Exp does not bring enums to correct common type if one leg is const
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Jun 13 08:13:52 UTC 2023
https://issues.dlang.org/show_bug.cgi?id=23988
Issue ID: 23988
Summary: Conditional Exp does not bring enums to correct common
type if one leg is const
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: bugzilla at digitalmars.com
Consider:
enum E : ubyte { A }
pragma(msg, "test1 ", typeof(1 ? E.A : E.A));
pragma(msg, "test2 ", typeof(1 ? E.A : cast(const)E.A));
which prints:
test1 E
test2 int
when it should print:
test1 E
test2 const(E)
The spec sez:
"If either the second or third expressions are of type void, then the resulting
type is void. Otherwise, the second and third expressions are implicitly
converted to a common type which becomes the result type of the conditional
expression."
https://dlang.org/spec/expression.html#conditional_expressions
Note that it doesn't exactly say what the common type is, but what the compiler
is doing is not expected. But the most obvious result should be const(E).
--
More information about the Digitalmars-d-bugs
mailing list