Template argument deduction fails with alias
Paul Backus
snarwin at gmail.com
Tue Sep 1 11:10:00 UTC 2020
On Tuesday, 1 September 2020 at 02:48:08 UTC, Ben Jones wrote:
>
> Thanks all.
>
> I tried using alias this at first and then I get errors trying
> to construct AliasType objects:
>
>
> auto pi = Payload!int(5);
> auto pe = ParseError("error");
> alias PRType = ParseResult!(Payload!int, ParseError);
> auto pr = PRType(pi);
>
> gives:
>
> cannot implicitly convert expression `pi` of type `Payload!int`
> to `SumType!(Payload!int, ParseError)`
Unfortunately, `alias this` does not apply to constructors. You
can either add your own constructor to the wrapper struct:
struct ParseResult(Ts...)
{
SumType!Ts data;
alias data this;
this(T)(T t)
if (staticIndexOf!(T, data.Types) >= 0)
{
data = t;
}
}
...or use a factory function like the following:
PRType parseResult(T)(T t)
{
return PRType(SumType!(Payload!int, ParseError)(t));
}
More information about the Digitalmars-d-learn
mailing list