Error with implicit cast of ^^=

wjoe invalid at example.com
Tue Jul 13 11:12:23 UTC 2021


```D
byte x = some_val;
long y = some_val;

x ^^= y; // Error:  cannot implicitly convert expression 
pow(cast(long)cast(int)x, y) of type long to byte
```

Is there a way to do this via ^^= ?

This is part of a unittest for opIndexOpAssign where the type of 
x is that of i.opIndex(_i). It's generated from a list of 
operators like this:

```D
part_int_t!(1, 8, 10) i;
static assert(is(typeof(i[0]): short));
static assert(is(typeof(i[1]): byte));
static assert(is(typeof(i[2]): bool));
static foreach(op; ["+=", "-=", "^^=", ...])
{{
   typeof(i[1]) x;
   mixin("x" ~ op ~ "y;");
   mixin("i[1]" ~ op ~ "y;");
   assert(i == x);
}}
```

I rewrote it to something like
```D
mixin("x = cast(typeof(x))(x" ~ op[0..$-1] ~ " y);");
```
but I'm curious if there's a less convoluted way.


More information about the Digitalmars-d-learn mailing list