Library Typedefs are fundamentally broken (alternate implementation)

Andrej Mitrovic via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 23 07:59:25 PDT 2014


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 ( )
{
}
-----


More information about the Digitalmars-d mailing list