<div dir="ltr">unfortunately this problem keeps arising every so often and the only thing we have are workarounds<div><br></div><div>to name a few:</div><div>digitalmars.D - Typesafe variadics in any position<br></div><div>
feature request: special optional argument (__FILE__, ...) AFTER variadic template<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Nov 16, 2013 at 3:55 PM, Jonathan M Davis <span dir="ltr"><<a href="mailto:jmdavisProg@gmx.com" target="_blank">jmdavisProg@gmx.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Sunday, November 17, 2013 00:09:53 Namespace wrote:<br>
> On Saturday, 16 November 2013 at 22:57:35 UTC, Namespace wrote:<br>
> > Hi.<br>
> > Is it possible to write something like that?<br>
> > ----<br>
> > void error(Args...)(string msg, Args args, string file =<br>
> > __FILE__, size_t line = __LINE__) { ... }<br>
> > ----<br>
> > ?<br>
> > Currently not, but how could it be done? I wont like to write:<br>
> > ----<br>
> > error(format(msg, args));<br>
> > ----<br>
> ><br>
> > Thanks in advance. :)<br>
><br>
> It is always surprising how quickly one has found its own<br>
> solution, after you have posted here... :)<br>
><br>
> ----<br>
> import std.stdio;<br>
> import std.string : format;<br>
><br>
> template error(string file = __FILE__, size_t line = __LINE__,<br>
> Args...) {<br>
>       void error(string msg, Args args) {<br>
>               static if (args.length != 0)<br>
>                       msg = .format(msg, args);<br>
><br>
>               writeln(.format(msg ~ ". In file %s on line %d.", file, line));<br>
>       }<br>
> }<br>
><br>
> void main()<br>
> {<br>
>       error("hallo");<br>
>       error("Hallo %s.", "du da");<br>
> }<br>
> ----<br>
<br>
</div></div>If you're dealing with variadic arguments, then making the file and line number<br>
be template arguments is really your only solution. However, I must warn you<br>
that that will result in a new template instantation _every_ time that you use<br>
error, because the file and line number are always going to be different unless<br>
you call the function multiple times on the same line). So, this approach is<br>
pretty much guaranteed to generate template bloat. That may be acceptable, but<br>
I'd personally suggest trying to find a different way to go about solving the<br>
problem unless error is not going to be called very often - e.g. force the<br>
caller to call format when creating the message rather than supporting<br>
variadic arguments directly in error.<br>
<span class="HOEnZb"><font color="#888888"><br>
- Jonathan M Davis<br>
</font></span></blockquote></div><br></div>