www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Regular Templates May Be `mixin`d?

reply surlymoor <surlymoor cock.li> writes:
```d
// 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?
Oct 02 2021
parent reply Paul Backus <snarwin gmail.com> writes:
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`.
Oct 02 2021
parent reply surlymoor <surlymoor cock.li> writes:
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?
Oct 02 2021
parent Paul Backus <snarwin gmail.com> writes:
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.
Oct 03 2021