Idea for getting rid of "static" on methods

Christopher Wright dhasenan at gmail.com
Mon Dec 3 06:12:03 PST 2007


Christopher Wright wrote:
> Matti Niemenmaa wrote:
>> Mike wrote:
>>> This reminds me of this:
>>>
>>> http://forums.worsethanfailure.com/forums/thread/82701.aspx
>>>
>>> Maybe we could try the same with D :)
>>
>> class X {
>>     void f()
>>     /+ begin +/
>>     in {} out {} body {}
>>
>>     align abstract auto const debug deprecated export extern final 
>> package private
>> protected public scope synchronized struct {
>>         static union {}
>>     }
>>
>>     override invariant {
>>         asm{}
>>         try volatile with (typeof(super)) switch(typeid(char) is null) 
>> { goto default;
>> case false: }
>>         catch { throw new class {}; } finally {}
>>
>>         delete this;
>>     }
>>
>>     unittest {
>>         for (;;) if (cast(bool)true) {
>>             do continue;
>>             while (function(){});
>>         } else break;
>>
>>         return assert(delegate void(lazy byte, ref cdouble, inout 
>> cfloat, creal,
>> dchar, double, float, idouble, ifloat, ireal, long, real, ubyte, uint, 
>> ulong,
>> ushort, wchar){});
>>     }
>> }
>> alias int /+ end +/ x;
>>
>> 83 keywords of a possible 98 (unless I missed some). The code compiles 
>> with
>> -unittest -debug. There's one warning "switch statement has no 
>> default" if
>> compiled with -w, though, so I guess I only get 82 points according to 
>> the rules
>> there. :-)
>>
>> The class is needed only to get the anonymous struct, otherwise it 
>> could be all
>> at global scope.
>>
>> Keywords which can't be used at all:
>>     cent, ucent, macro
>>
>> The rest of the keywords need an identifier and thus can't be used 
>> without
>> breaking the chain. Feel free to prove me wrong, of course. :-)
>>
>> I chose to use "alias" at the end there because it happened to be 
>> alphabetically
>> the first. The other options:
>>     enum, import, interface, foreach, foreach_reverse, mixin, module
>>     pragma, template, typedef, version, __traits
>>
>>
> 
> You could've done 'alias __traits(something...) identifier' instead, for 
>  one extra.

My mistake; that wouldn't actually increase it, if you're only counting 
globally reserved keywords.

If you could have an anonymous template, you could do:
mixin (template () { module foo; })!();



More information about the Digitalmars-d mailing list