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;"