Thread overview
std.experimental.logger.Logger writeLogMsg is @safe?
Feb 22, 2016
Minas Mina
Feb 22, 2016
Jonathan M Davis
Feb 23, 2016
Minas Mina
February 22, 2016
I'm trying to inherit from Logger, and I my custom logger to print to stdout using writeln(). But I can't because writeLogMsg is @safe, whereas writeln() is @system.

Why is writeLogMsg @safe? This is too restrictive.
February 22, 2016
On Monday, February 22, 2016 22:22:01 Minas Mina via Digitalmars-d-learn wrote:
> I'm trying to inherit from Logger, and I my custom logger to
> print to stdout using writeln(). But I can't because writeLogMsg
> is @safe, whereas writeln() is @system.
>
> Why is writeLogMsg @safe? This is too restrictive.

Short answer:

Use @trusted on the function overrides.

Long answer:

Well, if the logger isn't @safe, then it can't be easily used in @safe code, which would be a bit of a disaster, and from what I know of the logger API (though I'm not super familiar with it), there's really no reason why it shouldn't be @safe given that it's passing strings along, and derived classes just need to print those strings. So, derived classes that want to be @safe just need to be able to operate on strings safely. And if you can't guarantee that that's @safe, then you have a problem.

Now, obviously writeln isn't @safe (and maybe it should be inferred as such most of the time, but that's a separate issue), but what you can do so long as you can guarantee that using writeln is actually @safe (which it should be if all you're feeding it is strings), then you can mark your overrides as @trusted, and that should work with inheritance.

- Jonathan M Davis

February 23, 2016
On Monday, 22 February 2016 at 23:03:38 UTC, Jonathan M Davis wrote:
> On Monday, February 22, 2016 22:22:01 Minas Mina via Digitalmars-d-learn wrote:
>> [...]
>
> Short answer:
>
> [...]

Great, thanks.