Bug 1645 – can override base class' const method with non-const method

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2007-11-07T13:21:00Z
Last change time
2015-06-09T01:14:21Z
Keywords
accepts-invalid
Assigned to
bugzilla
Creator
schveiguy
Blocks
2573

Comments

Comment #0 by schveiguy — 2007-11-07T13:21:48Z
This should not be allowed. Otherwise, you can call a const method on a base class and the derived class can change the object. I believe the fix that should be implemented should follow the same rules as today's override rules. i.e., same function name/args, but derived method has different const specicification results in a different signature, and therefore a different overload. Here is code that demonstrates the issue: import std.stdio; class A { int x; const void f() { writefln("A"); } } class B : A { override void f() { x = 2; writefln("B"); } } void main(){ A y = new B; y.f; } [steves@localhost svn]$ dmd testme.d gcc testme.o -o testme -m32 -Xlinker -L/home/steves/dmd2/dmd/bin/../lib -lphobos2 -lpthread -lm [steves@localhost svn]$ ./testme B [steves@localhost svn]$
Comment #1 by schveiguy — 2008-10-21T10:57:43Z
Bumping the severity up. This really is a terrible bug, especially since we are getting closer and closer to pure functions. This bug has existed way too long.
Comment #2 by bugzilla — 2009-04-01T13:51:40Z
Fixed DMD 2.027