How to create compile-time container?

Andrey Zherikov andrey.zherikov at gmail.com
Tue Sep 1 18:19:55 UTC 2020


On Monday, 31 August 2020 at 20:44:16 UTC, Adam D. Ruppe wrote:
> On Monday, 31 August 2020 at 20:39:10 UTC, Andrey Zherikov 
> wrote:
>> How can I do that?
>
> You can use a normal string[] BUT it is only allowed to be 
> modified inside its own function.
>
> Then you assign that function to an enum or whatever.
>
>
> string[] ctGenerate() {
>    string[] list;
>    list ~= "stuff";
>    return list;
> }
>
> enum list = ctGenerate();
>
>
> That's all allowed. But CTFE is now allowed to read or modify 
> anything outside its own function; you can't have two separate 
> function calls build up a shared list (unless you can somehow 
> call them both together like `enum list = ctGenerate() ~ 
> other_thing();`


The thing I'm trying to implement is: I have a function 
foo(string s)() and some "state"; this function should override 
this "state" (using "s" param) for all code within this function 
(note that code can execute other modules that can refer to the 
same "state"). The problem is that I need this overridden "state" 
to be compile-time constant to be used in mixin. Any ideas how I 
can do this?


More information about the Digitalmars-d-learn mailing list