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?.

--

Reply via email to