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

Reply via email to