digitalmars.D.bugs - [Issue 4136] New: disable semantics
- d-bugmail puremagic.com (41/41) Apr 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4136
- d-bugmail puremagic.com (13/16) Jun 18 2013 http://d.puremagic.com/issues/show_bug.cgi?id=4136
- d-bugmail puremagic.com (13/16) Jun 18 2013 http://d.puremagic.com/issues/show_bug.cgi?id=4136
http://d.puremagic.com/issues/show_bug.cgi?id=4136 Summary: disable semantics Product: D Version: unspecified Platform: x86 OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc This is not yet a bug report, but it can become one. This is D2 code: class A { void foo() {}; } class B : A { override disable void foo() {} } class C : B { override void foo() {}; } void main() { A b1 = new B; b1.foo(); B c1 = new C; c1.foo(); // Error: function test.B.foo is not callable... } It compiles with dmd 2.043 with an error: test.d(15): Error: function test.B.foo is not callable because it is annotated with disable The b1 is an instance of class B, but the call to foo produces no error. While c1 is an instance of C, but it generates an error. I don't understand well the design of disable, but to be useful and more meaningful isn't it necessary/better to enforce it (at run-time) on the dynamic type of an object? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 30 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4136 Michal Minich <michal.minich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |michal.minich gmail.com PDT ---I don't understand well the design of disable, but to be useful and more meaningful isn't it necessary/better to enforce it (at run-time) on the dynamic type of an object?disable is exactly for static enforcement, so it can work on statically know type of variable (not dynamic instance type). Dynamic enforcement is available via "override void foo() { assert(false) };". So I think this bug is invalid. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 18 2013
http://d.puremagic.com/issues/show_bug.cgi?id=4136 bearophile_hugs eml.cc changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALIDdisable is exactly for static enforcement, so it can work on statically know type of variable (not dynamic instance type). Dynamic enforcement is available via "override void foo() { assert(false) };". So I think this bug is invalid.Three years later I understand disable better, and indeed this is invalid. Hopefully other D programmers will not make the same mistake of mine. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 18 2013