Re: Eponymous template member from a template mixin

2018-08-04 Thread Yuxuan Shui via Digitalmars-d-learn
On Saturday, 4 August 2018 at 21:10:32 UTC, Steven Schveighoffer 
wrote:

On 8/4/18 4:10 PM, Yuxuan Shui wrote:

This doesn't work:

template A() {
 void B() {};
}
template B() {
 mixin A!();
}
void main() {
 B!()();
}

Is this intentional?


I believe mixin templates introduce a new symbol namespace to a 
degree. I doubt you would be able to do something like this.


-Steve


What is the rational behind this?


Re: Eponymous template member from a template mixin

2018-08-04 Thread Jonathan M Davis via Digitalmars-d-learn
On Saturday, August 04, 2018 17:10:32 Steven Schveighoffer via Digitalmars-
d-learn wrote:
> On 8/4/18 4:10 PM, Yuxuan Shui wrote:
> > This doesn't work:
> >
> > template A() {
> >
> >  void B() {};
> >
> > }
> > template B() {
> >
> >  mixin A!();
> >
> > }
> > void main() {
> >
> >  B!()();
> >
> > }
> >
> > Is this intentional?
>
> I believe mixin templates introduce a new symbol namespace to a degree.
> I doubt you would be able to do something like this.

A prime example of this is how you can't introduce function overloads with a
template mixin.

- Jonathan M Davis



Re: Eponymous template member from a template mixin

2018-08-04 Thread Steven Schveighoffer via Digitalmars-d-learn

On 8/4/18 4:10 PM, Yuxuan Shui wrote:

This doesn't work:

template A() {
 void B() {};
}
template B() {
 mixin A!();
}
void main() {
 B!()();
}

Is this intentional?


I believe mixin templates introduce a new symbol namespace to a degree. 
I doubt you would be able to do something like this.


-Steve


Eponymous template member from a template mixin

2018-08-04 Thread Yuxuan Shui via Digitalmars-d-learn

This doesn't work:

template A() {
void B() {};
}
template B() {
mixin A!();
}
void main() {
B!()();
}

Is this intentional?