Variable arguments with file and line information?

Chris Nicholson-Sauls ibisbasenji at gmail.com
Sun Nov 17 04:06:11 PST 2013


On Saturday, 16 November 2013 at 23:55:47 UTC, Jonathan M Davis 
wrote:
>
> If you're dealing with variadic arguments, then making the file 
> and line number
> be template arguments is really your only solution. However, I 
> must warn you
> that that will result in a new template instantation _every_ 
> time that you use
> error, because the file and line number are always going to be 
> different unless
> you call the function multiple times on the same line). So, 
> this approach is
> pretty much guaranteed to generate template bloat. That may be 
> acceptable, but
> I'd personally suggest trying to find a different way to go 
> about solving the
> problem unless error is not going to be called very often - 
> e.g. force the
> caller to call format when creating the message rather than 
> supporting
> variadic arguments directly in error.
>
> - Jonathan M Davis

Something I'm wondering: if one were to split the implementation 
along these lines:


void error (string file = __FILE__, size_t line = __LINE__, 
Args...) (string msg, Args args) {
     errorImpl(file, line, msg, args);
}

void errorImpl (Args...) (string file, size_t line, string msg, 
Args args) {...}


What are the chances of the middle-man function being inlined, 
thus cutting down on template bloat in the final product?  I 
should hope it would be practically guaranteed.


More information about the Digitalmars-d-learn mailing list