RFC: Fixing std.typecons.Typedef

Meta via Digitalmars-d digitalmars-d at puremagic.com
Fri Sep 2 14:24:26 PDT 2016


On Friday, 2 September 2016 at 19:40:52 UTC, Meta wrote:
> I was thinking about how to fix Typedef the other day and came 
> up with a way of generating a guaranteed unique ID for each 
> instantiation, even if they are on the same line:
>
> alias FixedTypedef(T, T init = T.init, string cookie = new 
> class {}.stringof) = Typedef(T, init, cookie);
>
> alias Test1 = FixedTypedef!int, Test2 = FixedTypedef!int;
>
> assert(!is(Test1 == Test2)); //Passes
>
> What I'd like to know is if there might be a better way of 
> doing this. For each instantiation of FixedTypedef, there's a 
> new class being created and stored in the executable (I think), 
> as well as their .stringof. This could cause a lot of bloat if 
> Typedef is being used heavily.
>
> Furthermore, would this be considered a code breakage? Looking 
> at http://dlang.org/phobos/std_typecons.html#.Typedef, it says:
>
> "Typedef allows the creation of a unique type which is based on 
> an existing type. Unlike the alias feature, Typedef ensures the 
> two types are not considered as equals."
>
> This implies that the current behaviour of Typedef is a bug, 
> and thus fixing it would not be code breakage. However, people 
> may have come to depend on this bug and fixing it would break 
> code. Thirdly, there is no point in having Typedef behave as it 
> currently does by default, which is similar to how aliases 
> behave. Example:
>
> alias NewDouble = Typedef!double;
> assert(!is(NewDouble == double)); //Okay, not the same type as 
> expected
>
> alias NewInt1 = Typedef!int;
> alias NewInt2 = Typedef!int;
> assert(is(NewInt1 == NewInt2)); //Passes?!
>
> Thoughts? Opinions? I think it'd be nice to have a typedef that 
> works correctly by default.

Why did my auto-generated gravatar picture change?


More information about the Digitalmars-d mailing list