Thread overview
Recommended way to use __FILE__/__LINE__ etc.
Oct 22, 2020
Andrey Zherikov
Oct 22, 2020
H. S. Teoh
Oct 22, 2020
Mathias LANG
Oct 22, 2020
Andrey Zherikov
October 22, 2020
There are two ways how __FILE__, __LINE__ etc. can se used in function parameters: as regular parameters and as template parameters:

void rt(string file=__FILE__, int line=__LINE__, string func=__FUNCTION__)
{
    writeln(file,"(",line,"): ",func);
}

void ct(string file=__FILE__, int line=__LINE__, string func=__FUNCTION__)()
{
    writeln(file,"(",line,"): ",func);
}

What is recommended way?
What are pros/cons of each case?
October 22, 2020
On Thu, Oct 22, 2020 at 03:32:57PM +0000, Andrey Zherikov via Digitalmars-d-learn wrote:
> There are two ways how __FILE__, __LINE__ etc. can se used in function parameters: as regular parameters and as template parameters:
[...]
> What is recommended way?
> What are pros/cons of each case?

I don't know what's the "recommended" way, but generally, I prefer to pass them as regular parameters. Otherwise you will get a lot of template bloat: one instantiation per file/line combination.

However, sometimes there is not much choice: if your function is variadic, then you pretty much have to use template parameters, 'cos otherwise you won't be able to pick up the __FILE__/__LINE__ of the caller with default arguments.


T

-- 
Knowledge is that area of ignorance that we arrange and classify. -- Ambrose Bierce
October 22, 2020
On Thursday, 22 October 2020 at 16:03:45 UTC, H. S. Teoh wrote:
> On Thu, Oct 22, 2020 at 03:32:57PM +0000, Andrey Zherikov via Digitalmars-d-learn wrote:
>> There are two ways how __FILE__, __LINE__ etc. can se used in function parameters: as regular parameters and as template parameters:
> [...]
>> What is recommended way?
>> What are pros/cons of each case?
>
> I don't know what's the "recommended" way, but generally, I prefer to pass them as regular parameters. Otherwise you will get a lot of template bloat: one instantiation per file/line combination.
>
> However, sometimes there is not much choice: if your function is variadic, then you pretty much have to use template parameters, 'cos otherwise you won't be able to pick up the __FILE__/__LINE__ of the caller with default arguments.
>
>
> T

You will. This is possible since v2.079.0 (March 2018): https://dlang.org/changelog/2.079.0.html#default_after_variadic
So yeah, always pass them as function parameters to avoid bloat.
October 22, 2020
Thanks for all your answers!