[Issue 8766] unexpected compile-time error when switching a struct definition to a class

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Oct 6 03:32:25 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=8766


bearophile_hugs at eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs at eml.cc


--- Comment #2 from bearophile_hugs at eml.cc 2012-10-06 03:20:29 PDT ---
(In reply to comment #1)
> Reduced http://dpaste.dzfl.pl/348de450

Note that enums in D don't need a final semicolon. And it's better to paste or
attach the test cases in Bugzilla itself, instead of linking an external paste
site.

-----------------------

A little reduced:


enum Foo { X }
class Bar {
    static if (spam(Foo.X)) {}
    static Foo a = spam(Foo.X) ? 1 : Foo.X;
    static bool spam(Foo flag) {
        return flag != 0;
    }
}
void main() {}

DMD 2.061alpha gives:

temp.d(6): Error: variable flag cannot be read at compile time
temp.d(4):        called from here: spam(cast(Foo)0)

Replacing class with struct the error goes away.

-----------------------

Also this makes the error go away, showing it's related to a forward reference
error:

enum Foo { X }
class Bar {
    static bool spam(Foo flag) {
        return flag != 0;
    }
    static if (spam(Foo.X)) {}
    static Foo a = spam(Foo.X) ? 1 : Foo.X;
}
void main() {}

-----------------------

While this:

enum Foo { X }
class Bar {
    static if (spam(Foo.X)) {}
    static Foo a = spam(Foo.X) ? 1 : Foo.X;
    static bool spam(Foo flag) {
        return true;
    }
}
void main() {}


Gives:

temp.d(4): Error: cannot implicitly convert expression (1) of type int to Foo

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list