[Issue 4239] Mixed tuple comparison

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed May 26 15:20:56 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4239



--- Comment #2 from Simen Kjaeraas <simen.kjaras at gmail.com> 2010-05-26 15:20:55 PDT ---
(In reply to comment #1)
> This seems to work fine:
> 
> struct X(T...) { }
> 
> static assert(is(X!(int, int) == X!(int, int)));
> static assert(is(X!(int, "foo") == X!(int, "foo")));
> static assert(!is(X!(int, "foo") == X!("foo", int)));

Indeed it does. I do however still feel it should be included in Phobos as
something more obvious.
Simplified version, with newly acquired knowledge:

/**
Compares tuples that might contain a mixture of types and values.

Example:
----
static assert(SameTuple!(int, int).As!(int, int));
static assert(SameTuple!(int, "foo").As!(int, "foo"));
static assert(!SameTuple!(int, "foo").As!("foo", int));
----
 */

struct SameTupleImpl(T...) {
}

template SameTuple(T...) {
    template As(U...) {
        enum As = is( SameTupleImpl!T == SameTupleImpl!U );
    }
}

unittest {
    static assert(SameTuple!(int, int).As!(int, int));
    static assert(SameTuple!(float).As!(float));
    static assert(SameTuple!("foo").As!("foo"));
    static assert(!SameTuple!("foo").As!("bar"));
    static assert(!SameTuple!(int ).As!("bar"));
    static assert(!SameTuple!(int ).As!(float));
    static assert(SameTuple!(int, "foo").As!(int, "foo"));
    static assert(!SameTuple!(int, "foo").As!("foo", int));
    static assert(SameTuple!().As!());
    static assert(!SameTuple!(int).As!());
    static assert(!SameTuple!().As!(int));
    static assert(!SameTuple!("foo").As!());
    static assert(!SameTuple!().As!("foo"));
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list