static this
Chris Nicholson-Sauls
ibisbasenji at gmail.com
Fri Oct 6 14:05:07 PDT 2006
Max Samuha wrote:
> On Fri, 06 Oct 2006 17:24:35 +0300, Max Samuha <maxter at i.com.ua>
> wrote:
>
>
>>On Fri, 06 Oct 2006 06:53:08 -0600, Hasan Aljudy
>><hasan.aljudy at gmail.com> wrote:
>>
>>
>>>
>>>Max Samuha wrote:
>>>
>>>>Two questions to the community:
>>>>
>>>>1. The following is obviously a bug?
>>>>
>>>>class Test
>>>>{
>>>> static
>>>> {
>>>> this(){}; // defined not as static constructor but as
>>>>instance constructor
>>>>
>>>> ... more static members here
>>>> }
>>>>}
>>>
>>>As Chris already said, static is not really an attribute, it's just
>>>"static this".
>>>
>>>
>>>>2. Why module constructor must be attributed with static? All module
>>>>level methods are already static so the attribute seems to be
>>>>redundant. Make it optional?
>>>>
>>>
>>>I guess the reason is to be consistent. "static this" refers to a static
>>>constructor, i.e. a constructor that will be called at the beginning of
>>>the program's start.
>>>Module constructors are static constructors, so "static this" is used.
>>
>>Ok, that's clear. Anyway, the compiler should issue an error if 'this'
>>is used in static block. If not, it will be be confusing for newcomers
>>who will be unlucky enough to use it the way I did.
>
>
> And, IMO, this one shouldn't compile without complaint, either:
>
> class Test
> {
> static
> {
> static this()
> {
> writefln("In static ctor");
> }
> }
>
> static static void foo()
> {
> }
> }
>
> void main()
> {
> }
>
> How do you think?
Would cause a problem with the continuous attribute syntax...
# class Test {
# static:
# static this() {}
# void foo () {}
# }
I'd say make it a non-blocking warning, rather than an error.
-- Chris Nicholson-Sauls
More information about the Digitalmars-d
mailing list