Why is this not allowed?

ryuukk_ ryuukk.dev at gmail.com
Mon Oct 7 17:20:00 UTC 2024


On Monday, 7 October 2024 at 09:22:20 UTC, Nick Treleaven wrote:
> On Monday, 7 October 2024 at 08:05:59 UTC, ryuukk_ wrote:
>> I'm working on it TODAY, therefore i need a today's solution
>
> ```d
> import std.typecons;
>
> struct EntityDef
> {
>     Tuple!(int, "hp") stats;
> }
>
> void main()
> {
>     EntityDef ed;
>     int x = ed.stats.hp;
> }
> ```


Okay, i notice a pattern with Dlang

We went from trying to do that:

```D
struct EntityDef
{
     struct
     {
         int hp;
     } stats;
}
```


to getting suggested to do that instead:

```D
struct Foo
{
     int bar;

     //struct {/*
     Baz baz;
     struct Baz
     {
         auto opAssign(int value)
           => baz = value;//*/
         int baz;
     }
}

void main()
{
     Foo foo;
     foo.bar = 7;
     foo.baz = 42;

     imported!"std.stdio".writeln(foo); /*
     with opAssign()      Anonymous
     Foo(7, Baz(42))  or  Foo(7, 42)    */
}
```


to getting suggested to now do that:

```D
import std.typecons;

struct EntityDef
{
     Tuple!(int, "hp") stats;
}

void main()
{
     EntityDef ed;
     int x = ed.stats.hp;
}
```


Wich ends up improting a 11k LOC module: 
https://github.com/dlang/phobos/blob/master/std/typecons.d#L11092

Wich traverse god knows how many templates

Only just because i wanteed to do:


```D
struct EntityDef
{
     struct
     {
         int hp;
     } stats;
}
```


Why wanting to complicate everything?

I know i'm not a professional developper, i do this as a hobby, 
so i must be missing something

But something tells me that i'm not missing anything, i can't pin 
point it just yet!


More information about the Digitalmars-d-learn mailing list