Interesting bug with std.random.uniform and dchar
monarch_dodra via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jun 8 07:25:46 PDT 2014
On Sunday, 8 June 2014 at 13:55:48 UTC, H. S. Teoh via
Digitalmars-d-learn wrote:
> On Sun, Jun 08, 2014 at 11:17:41AM +0200, Joseph Rushton
> Wakeling via Digitalmars-d-learn wrote:
>> On 08/06/14 11:02, monarch_dodra via Digitalmars-d-learn wrote:
>> >Why would we ban uniform!T from accepting dchar? I see no
>> >reason for that.
>> >
>> >Let's just fix the bug by tweaking the internal check.
>>
>> Yea, I came to the same conclusion while working on it. :-)
>>
>> The solution I have is (i) in uniform!"[]" check that
>> !is(ResultType
>> == dchar) before checking the condition for calling
>> uniform!ResultType, and (ii) inside uniform!T, place
>>
>> static if (is(T == dchar))
>> {
>> return uniform!"[]"(T.min, T.max, rng);
>> }
>
> Doesn't wchar need to have a similar specialization too? Aren't
> some
> values of wchar invalid as well?
>
>
> T
Arguably, the issue is the difference between "invalid" and
downright "illegal" values. The thing about dchar is that while
it *can* have values higher than dchar max, it's (AFAIK) illegal
to have them, and the compiler (if it can) will flag you for it:
dchar c1 = 0x0000_D800; //Invalid, but fine.
dchar c2 = 0xFFFF_0000; //Illegal, nope.
More information about the Digitalmars-d-learn
mailing list