On Saturday, 28 May 2016 at 12:33:28 UTC, Era Scarecrow wrote:
On Saturday, 28 May 2016 at 12:25:14 UTC, Lodovico Giaretta wrote:
On Saturday, 28 May 2016 at 11:57:09 UTC, Era Scarecrow wrote:
    auto doSomethingDumb(T)(ref T t) if(isSafe!(T))

The problem is that T is a type, and I should check for safety of every method of T that I'm using in my function. This does not scale well, and if I change the body of the function to use a new method, I may forget to add it to the isSafe checks.

Hmmm that doesn't sound right. Safe code can't call unsafe code (or it shouldn't), it continues @safe/@trusted all the way down. So if you are passed a safe/trusted function, then it shouldn't need other checks.

 Or am i reading the question wrong?

Sorry for not being clear. Look at this example:

struct S1
{
    int doSomething() @safe
    {
        // do something safely
        return 1;
    }
}

struct S2
{
    int doSomething() @system
    {
        // do something usafe
        return 2;
    }
}

auto doSomethingDumb(T)(ref T t)
{
    T* pt = &t;
    return pt.doSomething();
}

auto s1 = S1();
auto s2 = S2();
auto x = doSomethingDumb(s1); // this call should be possible in @safe code auto y = doSomethingDumb(s2); // this should only be possible in @system code

Reply via email to