Library Typedefs are fundamentally broken (alternate implementation)

Dicebot via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 23 12:17:49 PDT 2014


On Tuesday, 23 September 2014 at 14:59:37 UTC, Andrej Mitrovic 
via Digitalmars-d wrote:
> Guys, all this fighting around. Can't we do something like the
> following and sort this out?
>
> -----
> import std.string;
> import std.typecons;
>
> private struct RealTypedef(T, T init_val, string cookie)
> {
>     /// implementation here...
> }
>
> template Typedef(T, T init_val = T.init,
>     string cookie = "", string mod = __MODULE__, size_t line = 
> __LINE__)
> {
>     static if (cookie == "")
>         enum the_cookie = format("%s_%s_%s", mod, line, 
> T.stringof);
>     else
>         alias the_cookie = cookie;
>
>     alias Typedef = .RealTypedef!(T, init_val, the_cookie);
> }
>
> alias Type_1 = Typedef!(void*);
> alias Type_2 = Typedef!(void*);
> static assert(!is(Type_1 == Type_2));  /// safe by default 
> (different types)
>
> alias Same_Type_1 = Typedef!(void*, null, "cookie");
> alias Same_Type_2 = Typedef!(void*, null, "cookie");
> static assert(is(Same_Type_1 == Same_Type_2));   // unsafe 
> *only if
> you request it*
>
> void main ( )
> {
> }
> -----

Andrei objects it.


More information about the Digitalmars-d mailing list