[Issue 17141] CommonType!(dchar, char) returns uint

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Fri Apr 28 11:41:32 PDT 2017


https://issues.dlang.org/show_bug.cgi?id=17141

hsteoh at quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hsteoh at quickfur.ath.cx

--- Comment #2 from hsteoh at quickfur.ath.cx ---
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?.

--


More information about the Digitalmars-d-bugs mailing list