What are (were) the most difficult parts of D?

H. S. Teoh hsteoh at quickfur.ath.cx
Wed May 11 16:04:36 UTC 2022


On Wed, May 11, 2022 at 03:34:12PM +0000, Paul Backus via Digitalmars-d-learn wrote:
> On Wednesday, 11 May 2022 at 15:10:28 UTC, Tejas wrote:
> > That'll be true the day when `@safe` becomes the default... Until
> > then, I'll atleast do `@safe:` on top of every module :)
> 
> `@safe:` is actually a bad idea if you're writing templated code,
> because it turns inference of `@system` into a compile-time error:

Yeah, for templated code, what you want is a @safe unittest that ensures
that the code is @safe when whatever you instantiate it with is @safe:

	auto myTemplateFunc(Args...)(Args args)
		/* N.B.: no attributes */
	{
		return ...;
	}

	@safe unittest {
		// This ensures that myTemplateFunc is callable from
		// @safe when instantiated with @safe arguments.
		auto result = myTemplateFunc(... /* @safe arguments */);
	}

This way, it's possible to instantiate myTemplateFunc with @system
arguments (you get a @system instantiation).


T

-- 
Life is unfair. Ask too much from it, and it may decide you don't deserve what you have now either.


More information about the Digitalmars-d-learn mailing list