https://issues.dlang.org/show_bug.cgi?id=17141
[email protected] changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #2 from [email protected] --- It's not just CommonType!(dchar, char); it's a whole slew of cases that are incorrectly handled: ------------ void main() { import std.range; struct CharRange(C) { C ch = 'a'; @property C front() { return ch; } @property bool empty() { return ch == C.init; } void popFront() { ch = C.init; } } CharRange!char charRange; CharRange!wchar wcharRange; CharRange!dchar dcharRange; pragma(msg, "char + char: ", ElementType!(typeof(chain(charRange, charRange)))); pragma(msg, "char + wchar: ", ElementType!(typeof(chain(charRange, wcharRange)))); pragma(msg, "wchar + char: ", ElementType!(typeof(chain(wcharRange, charRange)))); pragma(msg, "char + dchar: ", ElementType!(typeof(chain(charRange, dcharRange)))); pragma(msg, "dchar + char: ", ElementType!(typeof(chain(dcharRange, charRange)))); pragma(msg, "wchar + wchar: ", ElementType!(typeof(chain(wcharRange, wcharRange)))); pragma(msg, "wchar + dchar: ", ElementType!(typeof(chain(wcharRange, dcharRange)))); pragma(msg, "dchar + wchar: ", ElementType!(typeof(chain(dcharRange, wcharRange)))); pragma(msg, "dchar + dchar: ", ElementType!(typeof(chain(dcharRange, dcharRange)))); } ------------ Output: ------------ char + char: char char + wchar: int wchar + char: int char + dchar: uint dchar + char: uint wchar + wchar: wchar wchar + dchar: uint dchar + wchar: uint dchar + dchar: dchar ------------ Seems like the only time the correct common type is deduced, as far as character types are concerned, is when both are types are the same. All the other cases are worthy of a WAT?. --
