Array of structs construction

Maxim Fomin maxim at maxim-fomin.ru
Tue Oct 23 04:36:37 PDT 2012


On Tuesday, 23 October 2012 at 04:51:01 UTC, timotheecour wrote:
> void main() {
>     //BigInt[] data1 = [5, 6, 9];
>     auto data1 = [5, 6, 9].map!(a=>BigInt(a)).array;
>     Ranged!(int,5,10)[] data2 = [5, 6, 9];
>     auto data2 = [5, 6, 9].map!(a=>Ranged!(int,5,10)).array;
> }
>

Syntax construct a=>b causes nasty bug covered up by map 
template. It is related to 8854, 8832 and 7978 and several topics 
at forum associated with these issues (strange behavior using map 
together with delegates).

The problem is that typeless undeclared identifier "a" causes 
syntax construct a=>b to be of type void rather than delegate. 
Once syntax is fixed, type of expression becomes as expected 
http://dpaste.dzfl.pl/738f7301

Sometimes this leads to observable incorrect behavior, sometimes 
not.

For example, if you have
-----main.d--------------
version (bug)
{
	import std.string;
}

import test;

void main()
{
	testfun();
}
-------test.d-----------------
import std.algorithm;
import std.stdio;

void testfun()
{
	int c = 0;
	writeln([0].map!(a=>c)[0]);
}
-----------------------------
then the behavior of program would depend on whether bug version 
is set or not.


More information about the Digitalmars-d mailing list