how to pass a variable name in the template in this case?
    Ali Çehreli 
    acehreli at yahoo.com
       
    Thu Aug  2 16:56:30 PDT 2012
    
    
  
On 08/02/2012 04:42 PM, Zhenya wrote:
 > I mean that in ths code
 >
 > double f = 0;
 >
 > template T(alias a)
 > {
 > void doit()
 > {
 > a = 1;
 > }
 > }
 >
 > int main(string[] argv)
 > {
 > T!f.doit();
 > writeln(f);//alias a is'nt 0,alias a is f
Yes, the a in template T is an alias of f.
 > So why if we declared variable whith name 'f' something should change?
Getting back to your original code, the problem with the following line:
template T(alias a)
{
     auto T = a;    // <-- Error
}
Since templates are compile-time features, T!f must be evaluated at 
compile time and the template's value must be equal to the alias a.
But you are not instantiating the template with a compile-time entity:
     char f = 'a';
     writeln(typeid(T!f)); // <-- can't work
You must make f evaluatable at compile-time:
import std.stdio;
template T(alias a)
{
     auto T = a;
}
int main(string[] argv)
{
     enum f = 'a';      // <-- enum works
     assert(T!f == 'a');
     return 0;
}
Another option is to define f as immutable:
     immutable f = 'a';
Ali
    
    
More information about the Digitalmars-d-learn
mailing list