On Sunday, 24 March 2019 at 12:45:13 UTC, Francesco Mecca wrote:
https://run.dlang.io/is/zRcj59

```
alias Alg = Algebraic!(int, string);

void main()
{
        int n = 2;
    Alg value;

    value = n == 2 ? 2 : "string";
}
```

The original code used SumType but the effect is the same.

I suppose that I could write the following:

```
    if(n == 2) value = 2;
    else value = "string";
```

Is there a workaround for this that maintains a similar syntactic structure? is this behaviour accepted or should the compiler translate the first case in the second?

You could make a Choose function:

auto Ch(A,B)(bool c, A a, B b);

Then

value = Ch(n == 2, n, "string");

Not much different than

value = (n == 2) ? Alg(2) : Alg("string");

except you don't have to write Alg all the time.

The compiler should translate the first but that requires implicit conversion of any of the types T... to Algebraic!T... . Of course, that should be possible but is it?








Reply via email to