A struct with a tuple as alias this, is kind of confusing
ag0aep6g
anonymous at example.com
Fri Jul 27 10:48:08 UTC 2018
On 07/27/2018 12:19 PM, Yuxuan Shui wrote:
> On Friday, 27 July 2018 at 10:17:21 UTC, Yuxuan Shui wrote:
>> First, it surprised me that I can't index a struct like that. So:
>>
>> struct A(T...) {
>> alias S = T;
>> alias S this;
>> }
>>
>> alias B = A!(int, double);
>> B[0] x; // Actually an array
>>
>> Then, it surprised me again, that I actually can index it, sometimes
>>
>> static if (!is(B[0] == B[1]))
>> pragma(msg, "Works!");
>>
>> Why is this language like this :(
>
> Oh no, is it just defining arrays in the is() statement, though?
Yup.
> But wait, this works:
>
> alias C = A!(1,2,3);
> static if (C[0] < C[1])
> pragma(msg, "Ha!");
Looks like DMD decides that `C[0]` and `C[1]` can't be types in that
situation, so it tries the alias this. That's in line with how alias
this is supposed to work: only kick in when the code wouldn't compile
otherwise.
More information about the Digitalmars-d
mailing list