assert() vs. enforce(), invariant() vs. ... ?

John Colvin john.loughran.colvin at gmail.com
Fri Aug 30 08:52:52 PDT 2013


On Friday, 30 August 2013 at 15:41:55 UTC, Namespace wrote:
>> I believe typedef was deprecated due to no-one being able to 
>> agree on the semantics (although it's a bit before my time). I 
>> think it needs to come back as a very simple concept:
>>
>> A type duplication. e.g. typedef int myInt; (or typedef myInt 
>> = int;) creates a new type that is exactly identical to int, 
>> but is a distinct type in the type system.
>>
>> It should provide *exactly* identical behaviour to e.g. having 
>> two structs with identical contents but different names. E.g.
>>
>> struct A{}
>>
>> typedef A tA;
>> alias A aA;
>> alias tA atA;
>> typedef aA taA;
>>
>> assert(!is(tA == A));
>> assert(is(aA == A));
>> assert(is(atA == tA));
>> assert(!is(taA == atA));
>> etc....
>>
>> It's a really basic feature that D ought to have.
>
> I don't understand the difference to alias myInt = int;
> Isn't it the same?

see the first 2 asserts. alias doesn't create a new type, it just 
creates a new identifier for the old type.

A rough analogy: alias is by reference and typedef is by value


More information about the Digitalmars-d mailing list