On Tuesday, 7 July 2015 at 09:35:12 UTC, Jonathan M Davis wrote:
This is why you almost never use @trusted on templated functions. You should _never_ mark anything with @trusted unless you can guarantee that it's actually @safe. @safe is inferred for templated functions, so unless you're doing @system operations in a templated function, there is no need for @trusted, and if you are doing @system operations, then they need to be segregated in a way that you can mark that section of code as @trusted and guarantee that it's @safe regardless of what the template argument is. But you should _never_ mark code as @trusted if it involves calling functions that you can't guarantee are @safe, which almost always means that you should not mark code which calls functions on template arguments as
@trusted.

That being said, @trusted is very much a necessity in certain types of code, so it would be really bad if we didn't have it. But if you're marking much code as @trusted, or if you're marking templated code as @trusted, then you really need to be examining what you're doing. Very little code should need to be marked as @trusted, and every time that it is, you need to be able to absolutely guarantee that it's actually @safe in spite of the @system operations that you're doing in that code.

- Jonathan M Davis

Thanks for the advice.

Reply via email to