Consider this almost minimal example:
import std.algorithm;
import std.range;
import std.stdio;
struct S(Nested){
Nested member; // = I.init; // Uncommenting this wouldn't help
int g;
this(Nested member){
this.member = member;
}
this(int g){
this.g = g;
version(fix)
member = Nested.init;
}
}
// IFTI to handle type of map
auto makeS(Nested)(Nested member) => S!(Nested)(member);
import std.sumtype;
// This just works and needs no fix
auto makeSum(I)(I i) => SumType!(string, I)(i);
void main(){
auto input = iota(5).map!(b => b + 1).map!(b => b - 1);
auto s = makeS(input);
auto s2 = makeSum(input);
writeln(s);
writeln(s2);
}
Running the code with rdmd -version=fix app.d
works, but running rdmd -version=fix app.d
produces:
Error: field
member must be initialized in constructor, because it is nested struct
Why?
I didn't find anything about this in the spec.