[Issue 17110] New: Proxy (and therefore Typedef) doesn't work for type alias members
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Fri Jan 20 02:47:06 PST 2017
https://issues.dlang.org/show_bug.cgi?id=17110
Issue ID: 17110
Summary: Proxy (and therefore Typedef) doesn't work for type
alias members
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: major
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: john.loughran.colvin at gmail.com
We get away with it for enums with CTFE of opDispatch but it's no good for
types etc.
Here's a reasonably large unittest, now someone just needs to fix the
implementation so it passes:
version(unittest)
{
private int __global_n;
}
unittest
{
import std.typecons : Typedef;
import std.meta : AliasSeq;
int n;
struct S
{
alias X = int;
alias Y() = int;
alias Z(Q) = Q;
alias A = AliasSeq!(n, float);
alias B() = AliasSeq!(n, float);
alias C(e...) = AliasSeq!(e, float);
alias AS(Args ...) = AliasSeq!Args;
}
//alias TS = S; //for testing the tests without Typedef
alias TS = Typedef!S;
TS.X x;
static assert(is(typeof(x) == int));
TS.Y!() y;
static assert(is(typeof(y) == int));
TS.Z!int z;
static assert(is(typeof(z) == int));
alias a = TS.A;
a[0] = 3;
assert(n == 3);
static assert(is(a[1] == float));
alias b = TS.B!();
b[0] = 4;
assert(n == 4);
static assert(is(b[1] == float));
alias c = TS.C!__global_n;
assert(__global_n == 4);
static assert(is(c[1] == float));
alias AS = TS.AS;
alias L = AS!(__global_n, int, 4);
alias R = AliasSeq!(__global_n, int, 4);
assert(L[0] is R[0]);
assert(is(L[1] == R[1]));
assert(L[2] == R[2]);
}
--
More information about the Digitalmars-d-bugs
mailing list