Thread overview
Regular Templates May Be `mixin`d?
Oct 03, 2021
surlymoor
Oct 03, 2021
Paul Backus
Oct 03, 2021
surlymoor
Oct 03, 2021
Paul Backus
October 03, 2021
// Modified sixth example from https://dlang.org/spec/template-mixin.html

int y = 3;

template Foo()
{
    int abc() { return y; }
}

void main()
{
    int y = 8;
    mixin Foo; // local y is picked up, not global y
    assert(abc() == 8);
}

This compiles and works. I checked the spec, and I don't see anything; probably missed it, however; mentioning the fact that regular templates may be used with mixin. Is this expected?

October 03, 2021

On Sunday, 3 October 2021 at 02:52:20 UTC, surlymoor wrote:

>

This compiles and works. I checked the spec, and I don't see anything; probably missed it, however; mentioning the fact that regular templates may be used with mixin. Is this expected?

Yes, this is intentional and expected. From the spec:

>

A TemplateMixin takes an arbitrary set of declarations from the body of a TemplateDeclaration and inserts them into the current context.

Source: https://dlang.org/spec/template-mixin.html

Notice that it is specified to work with any template declaration, not just one declared as a mixin template.

October 03, 2021

On Sunday, 3 October 2021 at 03:04:29 UTC, Paul Backus wrote:

>

On Sunday, 3 October 2021 at 02:52:20 UTC, surlymoor wrote:

>

This compiles and works. I checked the spec, and I don't see anything; probably missed it, however; mentioning the fact that regular templates may be used with mixin. Is this expected?

Yes, this is intentional and expected. From the spec:

>

A TemplateMixin takes an arbitrary set of declarations from the body of a TemplateDeclaration and inserts them into the current context.

Source: https://dlang.org/spec/template-mixin.html

Notice that it is specified to work with any template declaration, not just one declared as a mixin template.

Lord, I'm careless. Thanks.
So the difference between a mixin template and a regular one is that the former may only be used with a mixin statement?

October 03, 2021

On Sunday, 3 October 2021 at 03:34:19 UTC, surlymoor wrote:

>

Lord, I'm careless. Thanks.
So the difference between a mixin template and a regular one is that the former may only be used with a mixin statement?

Yes, exactly.