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)