September 28, 2015 SList and DList init doesn't work in global variable | ||||
---|---|---|---|---|
| ||||
Is this intended or known issue ? It works with 2.066.
SList!int gslist = [1,2,3,4,5,6]; // broken since 2.067
// Error: reinterpreting cast from NodeWithoutPayload* to Node* is not
supported in CTFE
DList!int gdlist = [1,2,3,4,5,6]; // broken since 2.067
// Error: non-constant expression ...
void main()
{
SList!int lslist = [1,2,3,4,5,6]; // OK
DList!int ldlist = [1,2,3,4,5,6]; // OK
}
--
mk
|
September 28, 2015 Re: SList and DList init doesn't work in global variable | ||||
---|---|---|---|---|
| ||||
Posted in reply to Martin Krejcirik | On 09/28/2015 02:15 PM, Martin Krejcirik wrote:
> Is this intended or known issue ? It works with 2.066.
>
> SList!int gslist = [1,2,3,4,5,6]; // broken since 2.067
> // Error: reinterpreting cast from NodeWithoutPayload* to Node* is not
> supported in CTFE
>
> DList!int gdlist = [1,2,3,4,5,6]; // broken since 2.067
> // Error: non-constant expression ...
>
> void main()
> {
> SList!int lslist = [1,2,3,4,5,6]; // OK
> DList!int ldlist = [1,2,3,4,5,6]; // OK
> }
>
Yes, it looks like there are problems with their implementations. Those questions aside, I would initialize such module variables in a module static this() anyway:
import std.container;
SList!int gslist;
DList!int gdlist;
static this() {
gslist = [1,2,3,4,5,6];
gdlist = [1,2,3,4,5,6];
}
void main() {
}
If you want the lists to be immutable, then the following initialization pattern works:
import std.container;
immutable SList!int gslist;
immutable DList!int gdlist;
auto init_gslist()
{
return SList!int([1,2,3,4,5,6]);
}
auto init_gd_list()
{
return DList!int([1,2,3,4,5,6]);
}
static this() {
gslist = init_gslist();
gdlist = init_gd_list();
}
void main() {
}
The fact that I needed the two module-level init_* functions is also problematic, right? For example, moving those inside static this() does not work.
Ali
|
Copyright © 1999-2021 by the D Language Foundation