2013/3/27 Timon Gehr <timon.gehr@gmx.ch>
Because of a questionable patch (written by Kenji Hara, I think) some time ago, the following works:

struct S{
    template T(int x){
        auto s = x; // implicitly static
    }
}

I consider this bad language design.

In above case, 's' cannot make a field in S.
Because such a feature would make impossible to determine the size of S.

void main() {
    S s;
    assert(s.T!0.s == 0);  // If T!0.s is a field of s,
    assert(s.T!1.s == 1);  // also T!1.s is a field...
    pragma(msg, S.sizeof == ??);  // ???
}

So, variables in template declaration will always make "static' variables.

Kenji Hara