On Thursday, 8 February 2018 at 03:29:54 UTC, Timothee Cour wrote:
How about adding flags ` -ignore_pure` (and perhaps -ignore_safe -ignore_nothrow) to allow code to compile ignoring safe, pure, nothrow mismatches?

We already have that for pure. Just write `debug your_function` and it will work.

void foo() {}

pure void main() {
        debug foo();
}

Note you must use the -debug switch to dmd to compile such statements in, but they are exempt from the pure check.

Then for safe and nothrow, a @trusted wrapper that catches Exceptions and rethrows them as Errors will handle that, like you are basically already doing.

@nogc is the exception... I think you can cast. So this:

---
void foo() {}

@trusted nothrow @nogc void da(scope void delegate() a) {
        auto hack = cast(void delegate() @nogc) a;
        try
        hack();
        catch(Exception e)
                assert(0, e.msg);
}

@safe nothrow @nogc pure void main() {
        debug da({foo();});
}
---


cheats the system entirely.

Reply via email to