std.conv.to!string(array), strange compile error
Relja via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Nov 14 06:17:56 PST 2015
On Saturday, 14 November 2015 at 12:55:52 UTC, BBaz wrote:
> On Saturday, 14 November 2015 at 12:46:21 UTC, Relja wrote:
>> I've got this strange compile error using
>> std.conv.to!string(double[3]) - or any static array type. It's
>> called in toString override function of a template matrix
>> class, I'm building as a D learning project.
>>
>> [...]
>
> Maybe try to use a full slice after a 'static if' in case the
> template type is static array:
>
> --
> {
> ElementType!T[] something;
> static if (isStaticArray!T)
> something = value[]; // slice to get a dyn array
> else
> something = value; // already a dyn array
> }
> --
>
> and you work on something when it only works on dyn array. You
> can also slice the whole static array each time the problem
> occurrs
I'm not sure if I understand you fully, but I think you
misunderstood me - std.conv.to!string() works on a static array,
when called directly on the array object, but gives the compile
error when called on the returning object from a function.
Here is simpler example, which shows the same compile error:
import std.conv;
float[3] getFloat3() {
return [1, 2, 3];
}
void main() {
getFloat3().to!string; // does not compile
(new float[3]).to!string; // compiles
}
On this example, compiler error message is the same as above:
source/app.d(10,12): Error: template std.conv.to cannot deduce
function from argument types !(string)(float[3]), candidates are:
/usr/include/dlang/dmd/std/conv.d(293,1): std.conv.to(T)
dmd failed with exit code 1.
But then again, your suggestion got me to try this:
getFloat3()[].to!string;
This does compile! Can somebody elaborate, and tell us whats
going on here? I feel that this does not solve my issue, but only
makes me stay away from calling std.conv.to in this way.
Thanks,
Relja
More information about the Digitalmars-d-learn
mailing list