D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 3278 - Empty tuples don't match
Summary: Empty tuples don't match
Status: RESOLVED DUPLICATE of issue 3279
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: Other All
: P2 normal
Assignee: No Owner
URL:
Keywords: diagnostic
Depends on:
Blocks:
 
Reported: 2009-09-01 15:23 UTC by Bartosz Milewski
Modified: 2015-06-09 01:26 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Bartosz Milewski 2009-09-01 15:23:47 UTC
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 '()'
Comment 1 Manuel König 2010-10-11 10:14:51 UTC
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?
Comment 2 Manuel König 2010-10-11 10:24:49 UTC

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