<br><br><div class="gmail_quote">On Mon, Mar 1, 2010 at 10:16, Norbert Nemec <span dir="ltr">&lt;<a href="mailto:Norbert@nemec-online.de">Norbert@nemec-online.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Is there any fundamental error in my thinking? Some simple misunderstanding? Some slightly different syntax to be used? Or is it simply an unnessessary restriction in the compiler that could easily be removed?<br></blockquote>
<div><br>I don&#39;t know. Using factory functions, it seems to work and it has the nice side-effect of simplfying the syntax (templated functions do all the type deducing):<br><br>import std.stdio;<br><br>struct Sum(A,B) {<br>
   A a;<br>   B b;<br><br>   auto opAdd(T)(T a) { return sum(this,a); }<br>}<br><br><br>struct Base {<br>   auto opAdd(T)(T a) { return sum(this,a); }<br>}<br><br>Sum!(A,B) sum(A,B)(A a, B b) { return Sum!(A,B)(a,b);}<br>
Base!(A,B) base(A,B)(A a, B b) { return Base!(A,B)(a,b);}<br><br>void main() {<br>   Base a,b,c;<br><br>   auto d = a+b;<br>   writeln(typeof(e).stringof); // Sum!(Base, Base)<br>   auto e =de+a;<br>   writeln(typeof(f).stringof); // Sum!(Sum!(Base, Base),Base)<br>
   auto f = e+e+d;              // Look Ma, no parenthesis<br>   writeln(typeof(g).stringof); // Sum!(Sum!(Sum!(Sum!(Base,Base),Base), Sum!(Sum!(Base,Base),Base)),Sum!(Base,Base))<br>}<br> <br><br>Cheers,<br><br>  Philippe<br>
<br><br></div></div>