Conditional nothrow/safe/nogc/etc?
H. S. Teoh via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jan 29 21:57:34 PST 2016
On Sat, Jan 30, 2016 at 05:37:07AM +0000, Matt Elkins via Digitalmars-d-learn wrote:
> On Saturday, 30 January 2016 at 05:25:49 UTC, Rikki Cattermole wrote:
> >On 30/01/16 6:17 PM, Matt Elkins wrote:
> >>[...]
> >
> >templated functions have attribute inference. Meaning if it can be
> >nothrow it will be.
> >Regarding your real use case, again struct if templated so it should
> >be inferred.
>
> Convenient! Thanks!
A common idiom that we use is to write an attributed unittest to verify
that the function itself is @safe/etc.. This way, if instantiated with
safe/etc. types, the template will also be safe/etc., but if
instantiated with an unsafe type, it will correspondingly be unsafe
(instead of failing to compile if you wrote @safe on the template). The
unittest ensures that you do not accidentally introduce un- at safe code
into the template and cause *all* instantiations to become un- at safe.
auto mySafeCode(T)(T t) { ... }
@safe unittest
{
auto x = mySafeCode(safeValue);
}
T
--
Why are you blatanly misspelling "blatant"? -- Branden Robinson
More information about the Digitalmars-d-learn
mailing list