Capturing __FILE__ and __LINE in a variadic templated function
Nordlöw via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Nov 2 03:36:25 PST 2015
On Monday, 2 November 2015 at 09:54:50 UTC, John Colvin wrote:
> Works for me on multiple compilers. To be precise, this worked:
>
> template show(Args...)
> {
> void show(string file = __FILE__, uint line = __LINE__,
> string fun = __FUNCTION__)()
> {
> import std.stdio: write, writeln;
> try
> {
> debug write(file, ":",line, ":" /* , ": in ",fun
> */, " debug: ");
> foreach (const i, Arg; Args)
> {
> if (i) debug write(", "); // separator
> debug write(Arg.stringof, " is ", Arg);
> }
> debug writeln();
> }
> catch (Exception) { }
> }
> }
>
> unittest
> {
> int x = 11;
> show!x;
> }
No. This prints:
Arg is 11
I want it to print the name of Arg in the closing as
x is 11
equivalent to what my single-parameter overload
void show(alias arg, string file = __FILE__, uint line =
__LINE__, string fun = __FUNCTION__)()
{
import std.stdio: writeln;
try
{
debug writeln(file, ":",line, ":" /* , ": in ",fun */, "
debug: ", arg.stringof, " is ", arg);
}
catch (Exception) { }
}
does.
More information about the Digitalmars-d-learn
mailing list