On Saturday, 18 January 2014 at 00:57:27 UTC, Stanislav Blinov wrote:
Obviously I didn't explain myself clearly. I know how to determine if a function is nothrow or pure or @safe or anything else thanks to D's awesomeness :) But what I want is a way to *use* that knowledge when declaring my own functions. Or rather, tell the compiler "Wait, I really want this to be nothrow, but I don't know if that function will throw. Here's a check for you, please make me nothrow if it passes". After all, tags are not just for enforcing correctness at compile time, they can be used (once verified) for optimization too. So it'd be nice to find a way to provide all the nice info to the compiler whenever possible. It's not just about nothrow, but also pure, @safe/@system/@trusted, hell, even public/protected/private for that matter. :)

That way you can have two declarations but with one being opposite of the if.

...Or four in case I'd also want pure/not pure, or nine if I'd also want @safe/not @safe...

Okay, I'll explain what I was inferring. If the methods your calling are lets say nothrow which can be checked by a pure function lets say. Using the template if statement we can check that it does throw. For example:

void myfunc(T)(T arg) nothrow if (checkIfNothrow!T) {}
void myfunc(T)(T arg) if (checkIfNoModifiers!T) {}
void myfunc(T)(T arg) pure if (checkIfPure!T) {}

Basically you have to define all combinations. That is what I was meaning. Preferably you'll use q{} your code that is actually used. And use a template mixin to generate all these statements, so you don't have to!

Reply via email to