Idea for getting rid of "static" on methods

Christopher Wright dhasenan at gmail.com
Mon Dec 3 05:13:17 PST 2007


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.



More information about the Digitalmars-d mailing list