Now DMD compiler segfaulted. Here is my code if you are interested...

The berstein.d file :

import std.array;
import std.range;
import std.traits;
import std.algorithm;

bool isBernstein(alias K)() {

    static if (isArray!(typeof(K)) &&
                (K.empty || isNumeric!(typeof(K[0]))))
        return true;

    return false;
}

struct Bernstein(alias K, int S)
    if (isBernstein!(K))
{
    immutable typeof(K) kernel = K;
    immutable int shift = S;
}

template reverse(alias B)
{
    alias reverse = Bernstein!(array(retro(B.kernel)),
- (B.shift + cast(int)B.kernel.length - 1));
}

template alternate(alias B)
{
    alias alternate = Bernstein!(
array(map!(a => a[0] * a[1])(zip(B.kernel, cycle([-1, 1])))),
        B.shift);
}

and the berstein_test.d file :

import berstein;
import std.stdio;
import std.range;
import std.algorithm;

void main() {
    alternate!(Bernstein!([1.,1.], 0)) haar_scale;

    writeln(haar_scale.kernel);
    writeln(haar_scale.shift);

}

I get the following error message :

/usr/include/dmd/phobos/std/range.d(4220): Error: Internal Compiler Error: CTFE literal Tuple(void, void)._expand_field_0 dmd: ctfeexpr.c:359: Expression* copyLiteral(Expression*): Assertion `0' failed.
Aborted (core dumped)





Reply via email to