std.typecons Typedef initializers?

Stanislav Blinov stanislav.blinov at gmail.com
Tue Apr 26 00:08:18 UTC 2022


On Monday, 25 April 2022 at 23:41:47 UTC, Chris Katko wrote:

> So to use a typedef'd struct... I have to basically add the 
> original type on top of the typedef'd type every time? Surely 
> it's not this clunky?
>
> I mean, why even use a typedef then. Why not use just pair, 
> sPair, vPair, etc as  separate types with identical members and 
> cast as necessary? I'm not sure what the benefit typedef is 
> adding here.
>
> Thanks

It could just be an oversight in implementation and worth 
submitting an enhancement request on bugzilla.

Current implementation only defines a constructor that takes 
rvalue of original type, while what it ought to be doing is 
defining a variadic template constructor that would forward the 
arguments to underlying type's constructor.

To be fair, as far as your example code goes, it'd almost be 
easier to indeed simply duplicate the implementations, but have 
the compiler do it for you, e.g. like this:

```d
enum Space
{
     unspecified,
     screen,
     viewport,
}

struct TPair(Space space) { float x, y; }

alias Pair = Pair!(Space.unspecified);
alias sPair = Pair!(Space.screen);
alias vPair = Pair!(Space.viewport);
```


More information about the Digitalmars-d-learn mailing list