www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Question about template instantiation scope

reply Edward Diener <eddielee_no_spam_here tropicsoft.com> writes:
In the section about template instantiation scope, the below example is 
given of illegality:

"module a
template TFoo(T) { void bar() { func(); } }
module b
import a;
void func() { }
alias TFoo!(int) f; // error: func not defined in module a"

 From this I assume that a template which refers to some type or object 
which is not in the module of the template declaration must import the 
module where the type or object is defined in order to be instantiated 
at all. For example:

"module c
void func() { }
module a
import c;
template TFoo(T) { void bar() { func(); } }
module b
import a;
void func() { }
alias TFoo!(int) f; // legal"

Is this correct ?
Mar 22 2008
parent reply BCS <ao pathlink.com> writes:
Reply to Edward,

 From this I assume that a template which refers to some type or
 object which is not in the module of the template declaration must
 import the module where the type or object is defined in order to be
 instantiated at all.
 
 Is this correct ?
 
Yes. The use of template mixin allows the reverse behavior. But that's for later
Mar 22 2008
parent Edward Diener <eddielee_no_spam_here tropicsoft.com> writes:
BCS wrote:
 Reply to Edward,
 
 From this I assume that a template which refers to some type or
 object which is not in the module of the template declaration must
 import the module where the type or object is defined in order to be
 instantiated at all.

 Is this correct ?
Yes. The use of template mixin allows the reverse behavior. But that's for later
Thanks ! As you say, I will look at mixins once I understand D templates thoroughly, but not beforehand.
Mar 22 2008