[Issue 23397] New: private method callable from other module

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Oct 8 20:11:33 UTC 2022


https://issues.dlang.org/show_bug.cgi?id=23397

          Issue ID: 23397
           Summary: private method callable from other module
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: kdevel at vogtner.de

Source: https://forum.dlang.org/thread/dyhidpvomethytlzmkqi@forum.dlang.org

// file b.d
import std.stdio;

struct S {
   private void foo (ubyte c)
   {
      writeln (__PRETTY_FUNCTION__);
   }
   void foo ()
   {
   }
}

// file a.d
unittest {
   import b;
   auto s = S ();
   s.foo ('x');
}

$ dmd -g -unittest -main a.d b.d
$ ./a
void b.S.foo(ubyte c)
1 modules passed unittests

As Jack Pope pointed out in the forum reversing the order of definition of the
methods of S gives in the expected behavior:

// file b.d (reversed order)
import std.stdio;

struct S {
   void foo ()
   {
   }
   private void foo (ubyte c)
   {
      writeln (__PRETTY_FUNCTION__);
   }
}

$ dmd -g -unittest -main b.d -run a.d
a.d(5): Error: struct `b.S` function `foo` is not accessible
make: *** [run] Error 1

This seems to be a regression. 2.086.1 works as expected, 2.090.1 unexpectedly
compiles the code. The versions inbetween I did not check.

--


More information about the Digitalmars-d-bugs mailing list