On Tuesday, 18 April 2017 at 13:48:57 UTC, Stanislav Blinov wrote:
On Tuesday, 18 April 2017 at 13:28:06 UTC, Solomon E wrote:

I tried to produce an example of calling a function with
variadic template arguments using special tokens __FILE__ and __LINE__.

This compiles and runs, producing the output shown, using the default gdc provided by Ubuntu 17.04. This appears to be a workaround for Issue 8687...

There's a much more concise workaround, both in code written and generated ;)

import std.stdio;

template func(string file = __FILE__, int line = __LINE__)
{
    auto func(T...)(auto ref T args)
    {
        writeln("called func with ", T.length, " args at ",
                file, ":", line);
    }
}

void main()
{
    func();
    func(1, 2, 3);
}

Thank you for reminding me that templates can contain a definition of a function of the same name, which still surprises me as convenient, not as a bad thing.

Unfortunately, when I tried it, I found that while that attempt at a workaround is twice as concise in lines of code and symbols introduced, it is not acceptable. It gets the lines reported wrong. It reports the line for where the template was first instantiated for the same tuple of argument types, instead of exactly the line
of each call of `func`.

Reply via email to