On Sunday, 11 January 2015 at 11:52:42 UTC, ketmar via Digitalmars-d-learn wrote:
On Sun, 11 Jan 2015 11:41:08 +0000
Martin via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

Is there a way to get Tuple (and Typedef) from the std.typecons
module to generate a new type that is unique on every
instantiation? What I mean is:

alias T1 = Tuple!(int, int);
alias T2 = Tuple!(int, int);

writeln(__traits(isSame, T1, T2)); // prints true

When using Typedef, the types are still the same:

alias T1New = Typedef!(T1);
alias T2New = Typedef!(T2);

writeln(__traits(isSame, T1New, T2New)); // still prints true

The documentation of Typedef 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."

Shouldn't the second part at least print false then?
as for `Typedef!` -- you can use it's third arg, "cookie":

  import std.typecons;

  alias T1 = Tuple!(int, int);
  alias T2 = Tuple!(int, int);

  alias T1New = Typedef!(T1, T1.init, "t0");
  alias T2New = Typedef!(T2, T2.init, "t1");

  pragma(msg, __traits(isSame, T1New, T2New)); // false

there was a heated discussion about `std.typecons.Typedef`, built-in `typedef` and other related things, but the decision was to keep the
status quo.

I can't believe I missed the cookie part. Thanks!

Reply via email to