[Issue 13142] Enums on different classes confuse the compiler
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed Jul 16 19:02:01 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=13142
Kenji Hara <k.hara.pg at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
Hardware|x86_64 |All
Version|unspecified |D2
OS|Linux |All
Severity|regression |normal
--- Comment #1 from Kenji Hara <k.hara.pg at gmail.com> ---
(In reply to Domingo Alvarez Duarte from comment #0)
> dmd 2.065 : bugEnum.d(4): Error: cannot implicitly convert expression (3) of
> type int to TYPE
> LDC - the LLVM D compiler (0.13.0) based on DMD 2.064: The same error.
> gdc 4.9: The same error.
> gdc 4.8.1 : Compiles without error.
In 2.064, some incorrect type coercing around enum declaration has been fixed.
By that, the error reporting is an expected result from 2.064, and it's not a
regression issue.
At line 16 in the sample code:
DELIMETER = Button.TYPE.max + 1
The type of Button.TYPE.max is Button.TYPE, but the addition result is typed
int.
In this code, base type of Toolbar.ButtonTYPE is deduced to Button.TYPE, and
int is not implicitly convert to it. So the line should be changed to:
DELIMETER = cast(Button.TYPE)Button.TYPE.max + 1
or specify the base type of ButtonTYPE as int explicitly:
enum ButtonTYPE : int // <--
{
COMMAND = Button.TYPE.COMMAND,
CHECK = Button.TYPE.CHECK,
OPTION = Button.TYPE.OPTION,
DELIMETER = Button.TYPE.max + 1 // OK
}
Although, as I explained, the true bug is in line 16. Therefore the diagnostic
message should be fixed to:
bugEnum.d(16): Error: cannot implicitly convert expression (3) of type int to
TYPE
--
More information about the Digitalmars-d-bugs
mailing list