std.array.array and immutable elements

Jack Applegame via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Nov 7 06:32:57 PST 2014


DMD64 D Compiler v2.066.1
Why second call doesn't compile?

import std.array;
import std.algorithm;

class Foo {
	bool flag;
}
void main() {
   immutable(Foo)[] foos;
   foreach(i; 0..5) foos ~= new Foo;
	
   // compiles, typeof(bar1) == immutable(Foo)[]
   auto bar1 = array(foos.filter!(i => i.flag));
	
   // fails, expected typeof(bar2) == immutable(Foo)[]
   auto bar2 = array(foos.map!(i => i));
}

Error: cannot implicitly convert expression (arg) of type 
immutable(Foo) to test.Foo
Error: template instance 
std.conv.emplaceRef!(immutable(Foo)).emplaceRef!(immutable(Foo)) 
error instantiating
instantiated from here: array!(MapResult!(__lambda2, 
immutable(Foo)[]))


More information about the Digitalmars-d-learn mailing list