D aliases vs. C typedefs

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jun 10 13:33:02 PDT 2014


On 06/10/2014 01:18 PM, Tom Browder via Digitalmars-d-learn wrote:

 >>> alias int[2] val5[2];     // D: a 2-dimensional array of ints? 
(int[2][2])
 >>> ?
 >>
 >> Pretty strange. :)
 >>
 >>      pragma(msg, val5);
 >>
 >> outputs this:
 >>
 >> int[2][2]
 >
 > Okay, checks with my guess.
 >
 >>> alias int[4] val6[2];     // D:  a 2-dimensional array of ints?
 >>> (int[4][2]) ?
 >>> alias int    val7[2];      // D:  a 1-dimensional array of ints? 
(int[2])
 >>> ?
 >>
 >> I don't know whether those are legal. I hope not. :)
 >
 > I agree, but they compile!  If they are not legal, why am I getting 
no errors?

I think they are actually legal: This is D's support of C-style array 
declaration acting the same in alias declaration:

void main()
{
     int a[2];    // C-style
     int[2] b;    // D-style
     static assert(is (typeof(a) == typeof(b)));

     alias int A[2];    // C-style
     alias int[2] B;    // old D-style
     alias C = int[2];  // D-style

     static assert(is (A == B));
     static assert(is (B == C));
}

Ali



More information about the Digitalmars-d-learn mailing list