Can a call to pragma(msg, __FILE__, ...) be mixin templatized?

Simen Kjærås simen.kjaras at gmail.com
Tue Aug 18 09:13:54 UTC 2020


On Tuesday, 18 August 2020 at 08:05:20 UTC, Per Nordlöw wrote:
> On Tuesday, 18 August 2020 at 08:03:04 UTC, Per Nordlöw wrote:
>> Forgot to mention that I want to support variadic arguments to 
>> `ctLog` similar to what is done with
>
> And these arguments should be of any template argument kind, 
> not only a compile-time string.

I'm not a fan of string mixins (ask Adam how they're the scourge 
of good programming, a wart on D's behind, and so on :p), but I 
found no good way to do this without them:

string ctLog(Args...)(string file = __FILE__, size_t line = 
__LINE__) {
     import std.conv : to;
     string result = `pragma(msg, "`~file~`(", `~line.to!string~`, 
"): "`;
     static foreach (e; Args) {
         result ~= `, `~e.stringof;
     }
     return result~`);`;
}

mixin(ctLog!("This ", "is ", "module ", "scope."));
unittest {
     mixin(ctLog!"function scope");
}
struct S {
     mixin(ctLog!"Struct scope");
}

--
   Simen


More information about the Digitalmars-d-learn mailing list