Here's the simple idea: __not(anything) just turns off whatever `anything` does in the compiler.

__not(final) void foo() {} // turns off the final flag (if it is set) __not(@nogc) void foo() {} // turns off the @nogc flag (if it is set)

__not(const)(int) a; // not const

All it does is invert the flags; the implementation would be like `flags &= ~WHATEVER;` so unless it was already set, it does nothing and does not check for contradictions.


const:
   int b; // const
  __not(const)(int) a; // not const
immutable:
   int c; // immutable int
__not(const)(int) a; // still immutable int; there was no const set to turn off.


It also affects attrs brought through definitions though:

shared class foo {
   int a; // automatically shared cuz of the above line of code
   __not(shared) int b; // no longer shared
}



This is just a generic way to get the flipped attributes WHICH WE DESPERATELY NEED IN ALL SITUATIONS and I don't want to argue over keywords line impure and whatever __not(shared) would be called etc.

Reply via email to