Philippe Sigaud wrote:

That beats hell out of my clumsy templates :)


Your templates are not clumsy, it's typically the way some other PL would process lists/arrays. I used to write a lot of these. But 6 months ago, CTFE got seven-leagues boots and right now it's much easier on the eye to use CT functions.


Thanks for friendly shoulder tap :)
I think I just need to get accustomed with CTFE. I mostly work in C++, and it's templates (much inspired by Andrei's C++ publications as well as Loki, by the way) are telling on me. I constantly tend to forget there are so many constructs in D I can use at compile time without worry.



    When I was on the way to my initial solutions I was under strong
    impression that T[N] func() won't work. Now I see that was because I
    didn't bother to fully understand how arrays are returned from
    functions. I got it now, so thanks a lot again!


There used to be a time, maybe not 18 months ago where returning static arrays from functions was not possible, IIRC..

This may have something to do with my assumptions. I haven't tried D much since when shared was introduced (don't remember how long ago it was).

Right now, I think you can use them with no problem. Maybe someone well-versed in optimization will tell us it's not a good idea, I don't know.

Well, as you've said yourself, if it works... :)

PS. I'm not sure as to where to post this, but after I tried your solution I've noticed one interesting (or rather strange) thing:

struct S(T,size_t N)
{
        T[N] arr;
        int foo;        // type doesn't seem to matter here,
                        // taking int for clarity

        static immutable S C1   =   { initializeWith!(T,N)(0) 5 };
        // Note there is no comma after first initializer    ^
}

This actually compiles and works, though I have an impression that syntax error is in order. Putting in second array and attempting similar initialization without commas leads to one. I've only tried it with Windows 2.048, though I think the front end would eat this on Linux too. Is this valid, already known or I should report this?

Reply via email to