<div dir="ltr">2013/5/25 Ahuzhgairl <span dir="ltr"><<a href="mailto:bulletproofchest@gmail.com" target="_blank">bulletproofchest@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
No,<br><br>
struct Foo(T) {<br>
    static void f() { writeln("general"); }<br>
}<br>
<br>
struct Foo(T : A(B).alias C, A, B, C) {<br>
    static void f() { writeln("special"); }<br>
}<br>
<br>
struct Bar(T) {<br>
    struct Baz {}<br>
}<br>
<br>
struct Baz(T : A(B), A, B) {<br>
}<br>
<br>
void main() {<br>
    Foo!(Bar!(int).Baz);<br>
    Baz!(Bar!(int));<br>
}<br>
</blockquote></div><br></div><div class="gmail_extra" style>As I already shown, Baz!(Bar!(int)); could work in D.</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>But, currently Foo!(Bar!(int).Baz); is not yet supported.</div>
<div class="gmail_extra" style><br></div><div class="gmail_extra" style>I'm opening a compiler enhancement for related case,</div><div class="gmail_extra" style><a href="http://d.puremagic.com/issues/show_bug.cgi?id=9022">http://d.puremagic.com/issues/show_bug.cgi?id=9022</a><br>
</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>and right now I updated compiler patch to allow parameterize enclosed type by name/type/alias.</div><div class="gmail_extra" style><a href="https://github.com/D-Programming-Language/dmd/pull/1296">https://github.com/D-Programming-Language/dmd/pull/1296</a><br>
</div><div class="gmail_extra" style><a href="https://github.com/9rnsr/dmd/commit/b29726d30b0094b9e7c2e15f5802501cb686ee68">https://github.com/9rnsr/dmd/commit/b29726d30b0094b9e7c2e15f5802501cb686ee68</a><br></div><div class="gmail_extra" style>
<br></div><div class="gmail_extra" style>After it is merged, you can write it as follows.</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style><div class="gmail_extra">import std.stdio;</div><div class="gmail_extra">
struct Foo(T)</div><div class="gmail_extra">{</div><div class="gmail_extra">    static void f() { writeln("general"); }</div><div class="gmail_extra">}</div><div class="gmail_extra">struct Foo(T : A!(B).C, alias A, B, alias C)<br>
</div><div class="gmail_extra">{</div><div class="gmail_extra">    static void f() { writeln("special"); }</div><div class="gmail_extra">}</div><div class="gmail_extra"><br></div><div class="gmail_extra">struct Bar(T) { struct Baz {} }</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">void main()</div><div class="gmail_extra">{</div><div class="gmail_extra">    Foo!(Bar!(int).Baz) x;</div><div class="gmail_extra">    x.f();  // prints "special"</div>
<div class="gmail_extra">}</div><div><br></div><div style>Kenji Hara</div></div></div>