Bug 3278 – Empty tuples don't match

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
All
Creation time
2009-09-01T15:23:00Z
Last change time
2015-06-09T01:26:48Z
Keywords
diagnostic
Assigned to
nobody
Creator
bartosz

Comments

Comment #0 by bartosz — 2009-09-01T15:23:47Z
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 by manuelk89 — 2010-10-11T10:14:51Z
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 by manuelk89 — 2010-10-11T10:24:49Z
*** This issue has been marked as a duplicate of issue 3279 ***