On Friday, 9 January 2015 at 14:26:26 UTC, aldanor wrote:
It could work both ways at the same time.
Maybe even something like "default(pred) final(pred) nothrow"
--> if pred is compile-time-true, reset all attributes and then
add final/nothrow; if it's compile-time-false, disable final
and enable nothrow.
@disable is also currently a keyword.
pure nothrow @safe @nogc immutable
Test
{
//doSomething is nothrow @safe @nogc immutable
@disable(pure) void doSomething() {}
//getAnInt is pure @nogc immutable
@disable(nothrow, @safe) int getAnInt() {}
//typeof(n) == int
@disable(immutable) int n;
}
This is also useful for templated functions, methods, etc. It
allows one to tell the compiler that the function in question
should never have a particular attribute inferred for it.
//doSomethingElse will never be inferred as pure,
//but may be inferred as nothrow, @safe, or @nogc
@disable(pure) void doSomethingElse()() {}