www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3278] New: Empty tuples don't match

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3278

           Summary: Empty tuples don't match
           Product: D
           Version: 2.032
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: bartosz relisoft.com


A tuple containing an empty tuple is not the same as an empty tuple and two
such beasts are considered incompatible.
----
import std.typetuple;

template TypeList(T...)
{
    alias T toTuple;
}

static assert (TypeList!().toTuple == TypeTuple!());
----
Error: incompatible types for ((()) == (())): '()' and '()'

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 01 2009
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3278


Manuel König <manuelk89 gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |manuelk89 gmx.net
         OS/Version|Windows                     |All
           Severity|critical                    |normal



Reduced testcase:

template TypeTuple(TList...)
{
    alias TList TypeTuple;
}

template TypeList(T...)
{
    alias T toTuple;
}

static assert (TypeList!().toTuple == TypeTuple!());

Actually dmd is right to reject the code, but it's bad at conveying the reason.
You're trying to compare types with a '==' expression directly, which is not
allowed. Use is(A==B), instead, where A,B are types (documented), or
type-tuples (I think that it works for type-tuples is undocumented, but
type-tuples are treated like types in the frontend). These asserts compile and
the tests pass:

static assert (is(TypeList!().toTuple == TypeTuple!()));
static assert (is(TypeList!(int).toTuple == TypeTuple!(int)));

You can see it has nothing to do with empty tuples being a special case or so.
But I would like dmd to produce an error message like this:

Error: can not compare types with '==', use is(TypeA==TypeB) instead

I changed importance to normal, because it's just a bad error message. I see
you have wrong-code in the keywords list, so maybe you knew that already?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 11 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3278


Manuel König <manuelk89 gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|wrong-code                  |diagnostic
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE



*** This issue has been marked as a duplicate of issue 3279 ***

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