Bug 20478 – Phobos should have a trait to identify NaN-like behavior

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2020-01-03T20:53:53Z
Last change time
2024-12-01T16:36:07Z
Keywords
pull
Assigned to
No Owner
Creator
Simen Kjaeraas
Moved to GitHub: phobos#10401 →

Comments

Comment #0 by simen.kjaras — 2020-01-03T20:53:53Z
Since we have the pattern of returning float.nan from opCmp to signal incomparable values, it makes sense to have a trait to identify this behavior. Something like this: template hasNanComparison(T1, T2 = T1) { static if (isFloatingPoint!T1) enum hasNanComparison = true; else static if (!isAggregateType!T1) enum hasNanComparison = false; else static if (!is(typeof((T1 a, T2 b) => a.opCmp(b)))) enum hasNanComparison = false; else enum hasNanComparison = hasNanComparison!(ReturnType!((T1 a, T2 b) => a.opCmp(b))); } /// @safe unittest { assert( hasNanComparison!float); assert( hasNanComparison!real); assert(!hasNanComparison!int); assert(!hasNanComparison!string); assert(!hasNanComparison!(int*)); assert(!hasNanComparison!(int[])); struct S { float opCmp(S s) { return float.nan; } } assert( hasNanComparison!S); struct S2 { S opCmp(S2 s) { return S(); } } assert( hasNanComparison!S2); }
Comment #1 by dlang-bot — 2020-01-03T20:56:41Z
@Biotronic created dlang/phobos pull request #7342 "Fix issue 20478" fixing this issue: - Fix issue 20478 https://github.com/dlang/phobos/pull/7342
Comment #2 by robert.schadek — 2024-12-01T16:36:07Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10401 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB