digitalmars.D.bugs - [Issue 20478] New: Phobos should have a trait to identify NaN-like
- d-bugmail puremagic.com (56/56) Jan 03 2020 https://issues.dlang.org/show_bug.cgi?id=20478
https://issues.dlang.org/show_bug.cgi?id=20478 Issue ID: 20478 Summary: Phobos should have a trait to identify NaN-like behavior Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: enhancement Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: simen.kjaras gmail.com 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); } --
Jan 03 2020