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