Is it possible to allow implicit casting from a base type to a
union type?  For example, considering the following basic vector
union:

union vec2 {
        struct {
                float x = 0.0f;
                float y = 0.0f;
        }
        float[2] v;
        enum length = v.length;

        ref auto opIndex(size_t idx) {
                assert(idx >= 0 && idx < length, "Bounds error on index");
                return v[idx];
        }
        auto opAssign(float[] f) {
                assert(f.length == length, "Bounds error on assignment");
                v[0..length] = f[0..length];
                return this;
        }
}

vec2 a = vec2(1.0, 2.0); // fine
vec2 b;
b = [3.0, 4.0]; //fine
vec2 c = [5.0, 6.0]; // cannot cast float[] to vec2


Overloading opCast() seems to be only for "outbound" casting, and
unions can't have this() constructors like structs.  Is there any
way to accomplish this?

Reply via email to