www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Eponymous template member from a template mixin

reply Yuxuan Shui <yshuiv7 gmail.com> writes:
This doesn't work:

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

Is this intentional?
Aug 04 2018
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
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
Aug 04 2018
next sibling parent Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
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
Aug 04 2018
prev sibling parent Yuxuan Shui <yshuiv7 gmail.com> writes:
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?
Aug 04 2018