On Thursday, 24 May 2018 at 18:51:31 UTC, Mike Franklin wrote:
I'm trying to find a way to declare a block of code `nothrow:` when compiling with -betterC, but not `nothrow` when not compiling with -betterC.

The solution is needed for this PR: https://github.com/dlang/druntime/pull/2184/files#r188627707

Walter came up with a solution to this; put the code that is conditionally `nothrow` in a template and mix it in in the appropriate branch.

void test() { }

mixin template code()
{
    extern(C) void main()
    {
test(); // This should throw an error in -betterC because `main` is
                  // `nothrow` but `test` isn't. It doesn't work
    }
}

version(D_BetterC)
{
    nothrow:
    mixin code;
}
else
{
    mixin code;
}

Thanks, Walter.

Mike


Reply via email to