On Monday, 20 August 2018 at 15:55:54 UTC, Kagamin wrote:
On Monday, 20 August 2018 at 13:02:23 UTC, Atila Neves wrote:
On Monday, 20 August 2018 at 12:56:42 UTC, Kagamin wrote:
You need `return` attribute there, not `scope`:

struct MyStruct
{
    import core.stdc.stdlib;
    int* ints;
this(int size) @trusted { ints = cast(int*) malloc(size); }
    ~this() @trusted { free(ints); }
    inout(int)* ptr() return inout { return ints; }
}

I need `return` for what exactly? Your code still compiles, and my point is it shouldn't. It sure isn't memory safe.

@safe:
struct MyStruct
{
    import core.stdc.stdlib;
    int* ints;
    this(int size) @trusted { ints = cast(int*) malloc(size); }
    ~this() @trusted { free(ints); }
    inout(int)* ptr() return inout { return ints; }
}

int* gInt;
void f()
{
    auto s=MyStruct(10);
    gInt=s.ptr;
}

Error: address of variable s assigned to gInt with longer lifetime

Looks safe to me.

Is that safe as well?

void f()
{
    auto s = MyStruct(10);
    gInt = (() => s.ptr)();
}

Reply via email to