[Issue 1645] New: can override base class' const method with non-const method

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Nov 7 11:21:49 PST 2007


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

           Summary: can override base class' const method with non-const
                    method
           Product: D
           Version: 2.007
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: accepts-invalid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: schveiguy at yahoo.com


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 at localhost svn]$ dmd testme.d
gcc testme.o -o 
testme -m32 -Xlinker -L/home/steves/dmd2/dmd/bin/../lib -lphobos2 -lpthread  
-lm
[steves at localhost svn]$ ./testme
B
[steves at localhost svn]$


-- 



More information about the Digitalmars-d-bugs mailing list