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.

Reply via email to