digitalmars.D.learn - Private static inheritance
- David Ferenczi (35/35) Sep 23 2007 I've come accross with the following:
- Matti Niemenmaa (4/59) Sep 23 2007 Looks like good old bug 314 to me: http://d.puremagic.com/issues/show_bu...
- David Ferenczi (7/10) Sep 23 2007 This is funny. I tried it out with pure imports wihtout any qualifiers. ...
- Kirk McDonald (15/17) Sep 23 2007 [snip]
- David Ferenczi (6/22) Sep 23 2007 Hi Kirk,
I've come accross with the following: test.d -------------8<------------------ module test; static private import testAA: AA; static private import std.cstream: dout; int main(char[][] args) { dout.writeLine(AA.text); return 0; } -------------8<------------------ testA.d -------------8<------------------ module testA; class A { private: static const char[] text = "text"; } -------------8<------------------ testAA.d -------------8<------------------ module testAA; static private import testA: A; class AA : A { } -------------8<------------------ Running the program the output is: "text" I don't know what would be the correct behaviour, but I presume that a private member (even if it's static) can't be accessed either from outside, neither from a subclass. Am I wrong? Regards, David
Sep 23 2007
David Ferenczi wrote:I've come accross with the following: test.d -------------8<------------------ module test; static private import testAA: AA; static private import std.cstream: dout; int main(char[][] args) { dout.writeLine(AA.text); return 0; } -------------8<------------------ testA.d -------------8<------------------ module testA; class A { private: static const char[] text = "text"; } -------------8<------------------ testAA.d -------------8<------------------ module testAA; static private import testA: A; class AA : A { } -------------8<------------------ Running the program the output is: "text" I don't know what would be the correct behaviour, but I presume that a private member (even if it's static) can't be accessed either from outside, neither from a subclass. Am I wrong?Looks like good old bug 314 to me: http://d.puremagic.com/issues/show_bug.cgi?id=314 -- E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi
Sep 23 2007
Matti Niemenmaa wrote:Looks like good old bug 314 to me: http://d.puremagic.com/issues/show_bug.cgi?id=314This is funny. I tried it out with pure imports wihtout any qualifiers. I got the same result. So summerising the problem: if a private member qualified as static or const (or both), it won't remain private after import. And as far as I can judge the import qualifier doesn't matter. So the problem is surely related to 314, but it may introduce some new aspects.
Sep 23 2007
David Ferenczi wrote: [snip]static private import testAA: AA; static private import std.cstream: dout;[snip] Though this has nothing to do with your question, this is not valid code. A selective import cannot also be a static import. When you say: import std.stdio : writefln; Then the only symbol which is inserted into the module's namespace is 'writefln' (and not 'std'). Putting 'static' in front of this import causes the compiler to give this error: test.d(1): static import std cannot have an import bind list -- Kirk McDonald http://kirkmcdonald.blogspot.com Pyd: Connecting D and Python http://pyd.dsource.org
Sep 23 2007
Kirk McDonald wrote:David Ferenczi wrote: [snip]Hi Kirk, tnank you for pointing this out. I will correct it. Nevertheless the code compiles with dmd-1.20 under linux. Regards, Davidstatic private import testAA: AA; static private import std.cstream: dout;[snip] Though this has nothing to do with your question, this is not valid code. A selective import cannot also be a static import. When you say: import std.stdio : writefln; Then the only symbol which is inserted into the module's namespace is 'writefln' (and not 'std'). Putting 'static' in front of this import causes the compiler to give this error: test.d(1): static import std cannot have an import bind list
Sep 23 2007