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?