4. Of course i import it, but it is implicit import if i import
std.stdio.

No, it doesn't. If it does, it's an import bug. std.stdio does not publicly
import std.traits. You need to import it.

- Jonathan M Davis

Believe me, it works fine. So it must be a bug.

For opCast i have now this solution

        U opCast(U)() const {
                static if (is(FieldTypeTuple!(U)[0] == short)) {
                        return Vector2D!(short)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == float)) {
                        return Vector2D!(float)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == double)) {
                        return Vector2D!(double)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == int)) {
                        return Vector2D!(int)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == long)) {
                        return Vector2D!(long)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == byte)) {
                        return Vector2D!(byte)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == ushort)) {
                        return Vector2D!(ushort)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == uint)) {
                        return Vector2D!(uint)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == ulong)) {
                        return Vector2D!(ulong)(this.x, this.y);
                }
                
                static if (is(FieldTypeTuple!(U)[0] == ubyte)) {
                        return Vector2D!(ubyte)(this.x, this.y);
                }
                
                return null;
        }

which avoid explicit casts in opEquals.

So that work fine: if (vs2 == vf) {

Only two question: Is that correct behaviour and wouldn't change in future versions?
And exist a smarter solution as this? ;)

Reply via email to