[Issue 17547] New: Compile-time map!(...) fails to compile inside a struct when using lambdas ("this.__lambda1 has no value")
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sat Jun 24 15:40:51 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17547
Issue ID: 17547
Summary: Compile-time map!(...) fails to compile inside a
struct when using lambdas ("this.__lambda1 has no
value")
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: alex.bleron at gmail.com
The following code fails to compile:
////////////////////////////////////////
// https://dpaste.dzfl.pl/2573f6fb2ff5
import std.algorithm : map;
import std.array : join;
struct Test
{
pragma(msg, ["a", "b", "c", "d"].map!(a => a).join("\n"));
}
////////////////////////////////////////
Compiler output:
src/phobos/std/algorithm/iteration.d(455): Error: this.__lambda1 has no value
6 : Error: CTFE failed because of previous errors in map
6 : called from here: join(map(["a", "b", "c", "d"]), "\x0a")
6 : while evaluating pragma(msg, join(map(["a", "b", "c", "d"]), "\x0a"))
Compilation failed
////////////////////////////////////////
Expected compiler output:
a
b
c
d
-------------------------------------------------------
This code also fails (replacing the lambda with a function literal):
////////////////////////////////////////
import std.algorithm : map;
import std.array : join;
struct Test
{
// std/algorithm/iteration.d(455): Error: this.__funcliteral1 has no value
pragma(msg, ["a", "b", "c", "d"].map!(function (a) { return a;
}).join("\n"));
}
-------------------------------------------------------
However, this works:
////////////////////////////////////////
import std.algorithm : map;
import std.array : join;
struct Test
{
pragma(msg, ["a", "b", "c", "d"].map!("a").join("\n"));
}
-------------------------------------------------------
And this works too:
////////////////////////////////////////
import std.algorithm : map;
import std.array : join;
struct Test
{
pragma(msg, ["a", "b", "c", "d"].map!(function string(string a) { return a;
}).join("\n"));
}
--
More information about the Digitalmars-d-bugs
mailing list