## digitalmars.D - Access to intersection fields of an algebraic data type

• sighoya (17/17) Jan 19 Is there a solution for the following problem:
• Meta (3/20) Jan 19 You want the untyped version of std.variant.visit:
• Nicholas Wilson (3/20) Jan 19 Try using http://code.dlang.org/packages/taggedalgebraic I find
sighoya <sighoya gmail.com> writes:
```Is there a solution for the following problem:

import std.variant : Algebraic;

struct A
{
int a=2;
}

struct B
{
int a=2;
};

void main()
{
Algebraic!(A,B) c=A();
writeln(c.a);
return;
}

Error: no property a for type VariantN!(4LU, A, B)
```
Jan 19
Meta <jared771 gmail.com> writes:
```On Saturday, 19 January 2019 at 17:40:53 UTC, sighoya wrote:
Is there a solution for the following problem:

import std.variant : Algebraic;

struct A
{
int a=2;
}

struct B
{
int a=2;
};

void main()
{
Algebraic!(A,B) c=A();
writeln(c.a);
return;
}

Error: no property a for type VariantN!(4LU, A, B)

You want the untyped version of std.variant.visit:

writeln(c.visit!(aOrB => aOrB.a));
```
Jan 19
sighoya <sighoya gmail.com> writes:
```On Saturday, 19 January 2019 at 17:51:58 UTC, Meta wrote:
On Saturday, 19 January 2019 at 17:40:53 UTC, sighoya wrote:
Is there a solution for the following problem:

import std.variant : Algebraic;

struct A
{
int a=2;
}

struct B
{
int a=2;
};

void main()
{
Algebraic!(A,B) c=A();
writeln(c.a);
return;
}

Error: no property a for type VariantN!(4LU, A, B)

You want the untyped version of std.variant.visit:

writeln(c.visit!(aOrB => aOrB.a));

Thanks  Meta,

With the help of dlang's UFCS, we can rewrite it more
idiomatically as:

import std.variant : Algebraic;

struct A
{
int a=2;
}

struct B
{
int a=2;
};

int a(Algebraic!(A,B) c)
{
return cast(int)(visit!((c)=>c.a)(c));
}

void main()
{
Algebraic!(A,B) c=A();
writeln(c.a);
return;
}
```
Jan 19
Nicholas Wilson <iamthewilsonator hotmail.com> writes:
```On Saturday, 19 January 2019 at 17:40:53 UTC, sighoya wrote:
Is there a solution for the following problem:

import std.variant : Algebraic;

struct A
{
int a=2;
}

struct B
{
int a=2;
};

void main()
{
Algebraic!(A,B) c=A();
writeln(c.a);
return;
}

Error: no property a for type VariantN!(4LU, A, B)

Try using http://code.dlang.org/packages/taggedalgebraic I find
it much better.
```
Jan 19