On Sunday, 22 October 2017 at 12:17:49 UTC, Basile B. wrote:
On Sunday, 22 October 2017 at 10:57:24 UTC, NX wrote:
[...]

Fortunately D provides enough to simplify self-discipline:

---
import std.traits;

struct FP(T)
if (isFloatingPoint!T)
{
    T _value;
    alias _value this;

    void antiCoercion(V)()
    {
static assert(V.sizeof <= T.sizeof, "C++ float coercion is not allowed");
    }

    this(V)(V v) {antiCoercion!V; _value = v;}
    void opAssign(V)(V v) {antiCoercion!V; _value = v;}
}

void main()
{
    import std.math;
    FP!single PiOver2 = (atan(1.0) * 4) / 2;
}
---

Oh, I meant to write "FP!float PiOver2 = (atan(1.0) * 4) / 2;"

Reply via email to