<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Aug 17, 2013 at 1:54 AM, Andrej Mitrovic <span dir="ltr"><<a href="mailto:andrej.mitrovich@gmail.com" target="_blank">andrej.mitrovich@gmail.com</a>></span> wrote:<br>
<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"><div class="im">On 8/17/13, Timothee Cour <<a href="mailto:thelastmammoth@gmail.com">thelastmammoth@gmail.com</a>> wrote:<br>

> 1) impossible to have variadic arguments with an extra file/line parameters<br>
> at the end (unless one makes those file/line as compile time parameters but<br>
> that makes template code bloat), which would be very useful for debugging<br>
<br>
</div>This is a more general problem, I hope we can solve this one day.<br>
<a href="http://d.puremagic.com/issues/show_bug.cgi?id=8687" target="_blank">http://d.puremagic.com/issues/show_bug.cgi?id=8687</a></blockquote><div>That would be a partial fix only, as it would be impossible to override the file/line parameters in case of forwarding. WRT 8687, a better solution would be named parameters arguments (as I've suggested many times before):</div>
<div><br></div><div>void fun(T...)(T args, string file : __FILE__, int line : __LINE__ ){}</div><div><br></div><div>called with:</div><div><div><br></div><div>fun(1,2,3) => file =__FILE__,line=__LINE__</div></div><div>
<div><div>fun(1,2,3,file:"fun.d") => file ="fun.d",line=__LINE__</div></div></div><div><div><div>fun(1,2,3, line :24) => file =__FILE__,line=24</div></div></div><div><div>fun(1,2,3, line :24 , file:"fun.d") => file ="fun.d",line=24</div>
</div><div><br></div><div>This results in no ambiguity and still gives flexibility to override the defaults. Parameters marked with ":" *have* to be named at call site. Optionally, no default may be provided: void fun(T...)(T args, string file: , int nb_cols:){}</div>
<div><br></div><div> </div><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"><div class="im">
> Furthermore, if we later want to add more information to the context (eg<br>
> __MODULE__,__FUNCTION__, __COLUMN__ or __ARGUMENTS__), we would have to<br>
> refactor a lot of code.<br>
<br>
</div>P.S. __MODULE__, __FUNCTION__ and __PRETTY_FUNCTION__ were added in 2.063.<br>
<br>
Anywho, I agree it's a bit tedious having to explicitly use these as<br>
parameters.<br>
<br>
I once suggested to have a single __CONTEXT__ parameter which held<br>
various caller information inside of a struct (e.g. a struct with a<br>
file, line, function fields), it would at least make it easier to use<br>
since it would be just one parameter instead of several, but I didn't<br>
get a positive response for the feature.<br>
</blockquote></div><br></div><div class="gmail_extra">I was also in favor of this (better than having to list explicitly each of LINE,FILE...) but somehow if I remember andrei was against it to keep things simple. I disagree with the 'keep it simple' argument (really it doesn't add much to the compiler but simplifies user code), however it may be a bit inefficient to pass around everything in context. </div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Which is why I am proposing instead proper stacktrace support for maximum efficiency and ease of user code. </div><div class="gmail_extra"><br></div></div>