Problem solved partially.

http://dpaste.dzfl.pl/e7871a01

in structs I use fix length arrays declarations, and alias its to structs, but not allowed casting to fix length arrays.
I want check array length in compile time

    auto opBinary(string op,E)( E[DLen] b ) // fix length array
        if( ( op == "+" || op == "-" ) && is( E : T ) )
    {
        // without this checking in runtime
        //if( DLen != b.length )
        //    throw new Exception("bad length");
        auto res = VecT(this);
        foreach( i, ref m; mixin( "res." ~ DName ) )
            mixin( "m " ~ op ~ "= b[i];" );
        return res;
    }

if I write E[DLen] I have errors like this

Error: template opop.vec!("xyz").vec.arrayMath!("data",3LU,double,vec!("xyz")).opAssign does not match any function template declaration

Error: template opop.vec!("xyz").vec.arrayMath!("data",3LU,double,vec!("xyz")).opAssign(E) if (is(E : T)) cannot deduce template function from argument types !()(int[])

but declaration like this allowed
int[4] f = [1,2,3,4];

also checked in compile time assigning like this
int[4] f;
int[5] g;
g = f; // -> Error: mismatched array lengths, 5 and 4

I think in my situation checking in compile time must be possibly, because all of template params known in compile time, but I unknown how to use it...

Reply via email to