| |
 | Posted by Jonathan M Davis in reply to Minas Mina | Permalink Reply |
|
Jonathan M Davis 
Posted in reply to Minas Mina
| 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
|