Ok, I'm quite sure, I overlooked something.

First version, working

[code]
void main()
{
        auto s = S();
        auto t = T!s();
        t.fun;
}
struct S { void fun(){} }
struct T(alias s){ auto fun() { s.fun; } }
[/code]

Now, the fun method of struct T has to become static and the problems begin: Error: static function app.main.T!(s).T.fun cannot access frame of function D main

Ok, found somewhere, that it could help to move the static function outside of the struct and tried this.

Second version, not working

[code]
void main()
{
        auto s = S();
        auto t = T!s();
        fun!(typeof(t));
}
struct S { void fun(){} }
struct T(alias s){  }
auto fun(T : T!s, alias s)() { s.fun; }
[/code]

From my point of view, the second version is the most promising one, if there are problems with the first one. However, I didn't figured it out, how to match the alias template parameter to be able to call it from within the function fun (which is now at module level) directly.

Ok. Now, trying to find a solution I wrote the third version, working

[code]
void main()
{
        auto s = S();
        auto t = T!s();
        fun(t);
}
struct S { void fun(){} }
struct T(alias s){ auto ss(){return s; } }
auto fun(T)(T t) { t.ss.fun; }
[/code]

Is this meant to be the right way? I mean, ok, if so, then, the way from different frames is a little bit verbose, but working. However, the fun method is meant to not use a specific object from the time point, where it was marked static. Why should I pass an instance to it?

Reply via email to