Format
cc
cc at nevernet.com
Sat May 22 03:07:10 UTC 2021
On Friday, 21 May 2021 at 16:53:48 UTC, drug wrote:
> 21.05.2021 18:28, cc пишет:
>> On Friday, 21 May 2021 at 14:19:03 UTC, newbie wrote:
>>> Thank you, and formatValue?
>>
>> formattedWrite should handle this.
>>
>> ```d
>> @safe struct Foo {
>> int x = 3;
>> void toString(W)(ref W writer) if (isOutputRange!(W,
>> char)) {
>> writer.formattedWrite("Foo(%s)", x);
>> }
>> }
>> Foo foo;
>> writeln(foo);
>> ```
>>
>> Oddly enough this form of toString works from @safe code even
>> if it's not marked @safe, or even marked @system...
>
> I guess that because it is a template so the compiler is able
> to deduce its attributes. What about the case when it is marked
> @system - in this case compiler ignore that method due to the
> fact that it is @system and generate the default one. Because
> your implementation of the method is equal to the default
> implementation you didn't see the difference but it exists. Try
> to make your implementation of `toString` different and you'll
> see.
Ahh, in that case it would appear formattedWrite isn't @safe at
all. Looks like you have to stick with put()?
```d
@safe void toString(W)(ref W writer) if (isOutputRange!(W, char))
{
//writer.formattedWrite!("FOO:%s", x); // fails
import std.conv;
put(writer, "FOO:");
put(writer, x.to!string);
}
```
More information about the Digitalmars-d-learn
mailing list