User defined constructors now can construct all default types (e.g. float).
This commit is contained in:
parent
edf3e2a799
commit
c7e97b6113
|
@ -369,8 +369,8 @@ final class Constructor
|
||||||
|
|
||||||
return (ref Node n)
|
return (ref Node n)
|
||||||
{
|
{
|
||||||
static if(Node.Value.allowed!T){return Node.Value(ctor(n));}
|
static if(Node.allowed!T){return Node.value(ctor(n));}
|
||||||
else {return Node.userValue(ctor(n));}
|
else {return Node.userValue(ctor(n));}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
dyaml/node.d
22
dyaml/node.d
|
@ -1336,6 +1336,28 @@ struct Node
|
||||||
return Value(cast(YAMLObject)new YAMLContainer!T(value));
|
return Value(cast(YAMLObject)new YAMLContainer!T(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Construct Node.Value from a type it can store directly (after casting if needed)
|
||||||
|
static Value value(T)(T value) @trusted if(allowed!T)
|
||||||
|
{
|
||||||
|
static if(Value.allowed!T)
|
||||||
|
{
|
||||||
|
return Value(value);
|
||||||
|
}
|
||||||
|
else static if(isIntegral!T)
|
||||||
|
{
|
||||||
|
return Value(cast(long)(value));
|
||||||
|
}
|
||||||
|
else static if(isFloatingPoint!T)
|
||||||
|
{
|
||||||
|
return Value(cast(real)(value));
|
||||||
|
}
|
||||||
|
else static if(isSomeString!T)
|
||||||
|
{
|
||||||
|
return Value(to!string(value));
|
||||||
|
}
|
||||||
|
else static assert(false, "Unknown value type. Is value() in sync with allowed()?");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Equality test with any value.
|
* Equality test with any value.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue