You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a bad and obvious performance issue.
```dstruct S{ string toString() { return "S"; }}void main(){ import std.conv; assert(S.init.toString.ptr != S.init.to!string.ptr);}```
This assert should not pass -- `to!string` shouldn't do anything other than call `toString` on a struct.
In fact, if `S.toString`*does* allocate, `to!string` is suffering from an *extra allocation* -- one for the call to `S.toString`, and one for the allocated string that `to!string` always builds.
The underlying cause is that the default case for `toImpl!(string, T)` is to create an appender and then use format. There should be a case for when `T.toString` is defined.
See https://github.com/dlang/phobos/blob/f7e523bc3c69506c3e7b4da7e78af93ed8547910/std/conv.d#L1107 and https://github.com/dlang/phobos/blob/f7e523bc3c69506c3e7b4da7e78af93ed8547910/std/conv.d#L136
The text was updated successfully, but these errors were encountered:
schveiguy (@schveiguy) reported this on 2024-09-01T18:55:47Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=24739
Description
The text was updated successfully, but these errors were encountered: