[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