https://issues.dlang.org/show_bug.cgi?id=14771

[email protected] changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]

--- Comment #2 from [email protected] ---
A variant is to make makeS a template instead of S.foo:

----
struct S(alias f)
{
    auto foo() { return f(0); }
}

auto makeS()() @nogc
{
    int x = 10;
    S!(a => x) s;
    return s;
}

void main() @nogc
{
    auto s = makeS();
}
----

Compiles, but shouldn't.

Some change in 2.068's Phobos makes it possible to accidentally do this with
std.algorithm.map:

----
import std.algorithm: equal, map;
import std.range: only;

auto foo()(int[] a, immutable int b)
{
    return a.map!(x => x + b);
}

void main() @nogc
{
    int[3] test = [1,2,3];
    assert(test[].foo(3).equal(only(4,5,6)));
}
----

I've seen this twice recently:

http://forum.dlang.org/post/[email protected]
http://forum.dlang.org/post/[email protected]

--

Reply via email to