<div class="gmail_quote">On Tue, Aug 3, 2010 at 23:07, Andrej Mitrovic <span dir="ltr">&lt;<a href="mailto:andrej.mitrovich@gmail.com">andrej.mitrovich@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="gmail_quote"><div><br>If I understood everything, this code in the constraint:<br><br>is(typeof({x = fun(x, range.front);}() )))<br><br>creates an anonymous function, the compiler sees it&#39;s trying to access x so it makes it a delegate, and it infers that the function takes no arguments and the return type is void. Did I get this right?<br>
</div></div></blockquote><div><br></div><div>Yes, that&#39;s it. If the enclosed statements are OK, then the whole delegate compiles, gets a type (void delegate() ), and so on, though is(typeof()).</div><div><br></div><div>
So, using it as a way to get template constraints to work on many statements was not planned that way, I think. But it works :)</div><div><br></div><div>Basically any D block statement: { statements;} can be seen as a void delegate(). </div>
<div><br></div><div>see <a href="http://www.digitalmars.com/d/2.0/lazy-evaluation.html">http://www.digitalmars.com/d/2.0/lazy-evaluation.html</a></div><div>and <a href="http://www.digitalmars.com/d/2.0/statement.html#ScopeStatement">http://www.digitalmars.com/d/2.0/statement.html#ScopeStatement</a> for an example of this.</div>
<div><br></div><div>Philippe</div><div><br></div></div>