Re: AliasSeq in UDA

2019-03-10 Thread Basile B. via Digitalmars-d-learn

On Sunday, 10 March 2019 at 17:04:20 UTC, Sebastiaan Koppe wrote:

On Sunday, 10 March 2019 at 16:46:43 UTC, Basile B. wrote:
Yes I see. I've refined a bit the test case and maybe I'll 
took a look this week.


Cool. Is it normal to create a testcase that doesn't depend on 
phobos? I suppose it is needed for it to be included in dmd's 
testcases.


Yes.


Re: AliasSeq in UDA

2019-03-10 Thread Sebastiaan Koppe via Digitalmars-d-learn

On Sunday, 10 March 2019 at 16:46:43 UTC, Basile B. wrote:
Yes I see. I've refined a bit the test case and maybe I'll took 
a look this week.


Cool. Is it normal to create a testcase that doesn't depend on 
phobos? I suppose it is needed for it to be included in dmd's 
testcases.




Re: AliasSeq in UDA

2019-03-10 Thread Basile B. via Digitalmars-d-learn

On Sunday, 10 March 2019 at 16:05:19 UTC, Sebastiaan Koppe wrote:

On Sunday, 10 March 2019 at 13:41:32 UTC, Basile B. wrote:

It looks like a bug, a "reject-valid" one.
Try the same code with

enum A = 0;

and it work, despite of B being still opaque. The problem may 
be related to the fact the enum A in the orginal code is 
opaque and has not type.


Thanks. The example I posted was a reduced case, but I can 
still use your trick to fool the compiler.


The following is more real:

---

import std.meta;

enum A; enum B; enum Dummy = 0; // <- Dummy needs to be 0

struct Param(alias T) {}

@AliasSeq!(Dummy,Param!A,Param!B) // <- Here Dummy is needed
struct Foo {}

pragma(msg, __traits(getAttributes, Foo));

void main() {}

---

I have created an issue: 
https://issues.dlang.org/show_bug.cgi?id=19728


Yes I see. I've refined a bit the test case and maybe I'll took a 
look this week.


Re: AliasSeq in UDA

2019-03-10 Thread Sebastiaan Koppe via Digitalmars-d-learn

On Sunday, 10 March 2019 at 13:41:32 UTC, Basile B. wrote:

It looks like a bug, a "reject-valid" one.
Try the same code with

enum A = 0;

and it work, despite of B being still opaque. The problem may 
be related to the fact the enum A in the orginal code is opaque 
and has not type.


Thanks. The example I posted was a reduced case, but I can still 
use your trick to fool the compiler.


The following is more real:

---

import std.meta;

enum A; enum B; enum Dummy = 0; // <- Dummy needs to be 0

struct Param(alias T) {}

@AliasSeq!(Dummy,Param!A,Param!B) // <- Here Dummy is needed
struct Foo {}

pragma(msg, __traits(getAttributes, Foo));

void main() {}

---

I have created an issue: 
https://issues.dlang.org/show_bug.cgi?id=19728


Re: AliasSeq in UDA

2019-03-10 Thread Basile B. via Digitalmars-d-learn

On Sunday, 10 March 2019 at 13:20:12 UTC, Sebastiaan Koppe wrote:
The compiler complains about `cannot form tuple of tuples` 
whenever I try to put an AliasSeq in a UDA and try to use it.


You would expect the compiler to expand it. Is this a bug?

---

import std.meta;

enum A; enum B;

@AliasSeq!(A,B) // <-- Error: cannot form tuple of tuples
struct Foo {}

pragma(msg, __traits(getAttributes, Foo)); // <- must be 
present (error happens only when queried)


void main() {}

---

link to run.dlang.io: 
https://run.dlang.io/gist/cd5cd94d8ce5327e8a7d5ad77f1d15b8


It looks like a bug, a "reject-valid" one.
Try the same code with

enum A = 0;

and it work, despite of B being still opaque. The problem may be 
related to the fact the enum A in the orginal code is opaque and 
has not type.


I've seen a related issue lately.



Re: AliasSeq in UDA

2019-03-10 Thread Basile B. via Digitalmars-d-learn

On Sunday, 10 March 2019 at 13:41:32 UTC, Basile B. wrote:
On Sunday, 10 March 2019 at 13:20:12 UTC, Sebastiaan Koppe 
wrote:
The compiler complains about `cannot form tuple of tuples` 
whenever I try to put an AliasSeq in a UDA and try to use it.


You would expect the compiler to expand it. Is this a bug?

---

import std.meta;

enum A; enum B;

@AliasSeq!(A,B) // <-- Error: cannot form tuple of tuples
struct Foo {}

pragma(msg, __traits(getAttributes, Foo)); // <- must be 
present (error happens only when queried)


void main() {}

---

link to run.dlang.io: 
https://run.dlang.io/gist/cd5cd94d8ce5327e8a7d5ad77f1d15b8


It looks like a bug, a "reject-valid" one.
Try the same code with

enum A = 0;

and it work, despite of B being still opaque. The problem may 
be related to the fact the enum A in the orginal code is opaque 
and has not type.


I've seen a related issue lately.


It was 19605. But the relationship is not so obvious...