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