http://pastebin.com/cnKy8LGK Such thing causes "Error: no property 'max' for type 'enumf!ushort'" error (no error line or anything). I have tried implementing my own max using enum, static immutable variable, @property function and static @property function, either one does not work (throws "Error: no property 'max' for type 'enumf!ushort', did you mean 'max'?").
CyberShadow has made a patch that should fix this: http://dump.thecybershadow.net/88e4ac8353cebe100f9379da688829e0/opt-max-check.patch
This is working since 2.099 and the test suite contains a similar test to --- struct enumf( T = ushort ) { enum max = T.max; alias val this; T val = 1; this( T val ) { this.val = val; } this( int val ) { this.val = cast( T ) val; } void opAssign( int val ) { this.val = cast( T ) val; } enumf!T opBinary( string op : "+" )( T add ) { return enumf!T( val << add ); } int opCmp( enumf!T other ) { if( other.val == val ) return 0; else if( val > other.val ) return 1; else return -1; } } enum F { halCenter = enumf!ushort(), halRight, valCenter = enumf!ushort( 2 ), valRight = enumf!ushort( 1 ) } ---