Class declaration

Simen Haugen simen at norstat.no
Fri Oct 5 03:41:15 PDT 2007


module test;
import std.stdio;

private protected public public private public private protected public 
protected public private protected private public public private protected 
protected private class T {
 this(char[] msg) {
  writefln(msg);
 }
}

void main() {
 T t = new T("This works too :)");
}


"Bill Baxter" <dnewsgroup at billbaxter.com> wrote in message 
news:fe4tra$2bgd$1 at digitalmars.com...
> negerns wrote:
>> I have been testing/configuring a UML tool to generate D classes/files 
>> when I came across D's class attributes scope and final. I wondered if D 
>> classes have other attributes like public, private, protected. So I tried 
>> it and tested some D source codes. Here is one that I tried:
>>
>> private protected public class A {
>>     public this() { }
>> }
>>
>> void main() {
>>     auto a = new A();
>> }
>>
>> This code was successfully compiled using dmd 1.021 without errors or 
>> warnings, much to my surprise. Could anyone please tell me why is this 
>> so?
>
> You're certainly not the first one to ask.  :-)
>
> First off protection attributes don't apply within a module.  Everything 
> in one file has access to everything else.   D doesn't have C++'s "friend" 
> so that's sort of D's substitute.
>
> Second, the compiler is overly permissive about mixed attributes.  I think 
> there are bugs on file for it.  But fixing it is low priority since the 
> amount of harm it causes is small.
>
> --bb 




More information about the Digitalmars-d-learn mailing list