new string mixins -- debug printfs

Walter Bright newshound at digitalmars.com
Tue Feb 6 09:09:08 PST 2007


Bill Baxter wrote:
> Here's something fun that's now possible:
> 
> version(trace) {
>     template Trace(char[] msg="") {
>         const char[] Trace =
>            `writefln("%s(%s): `~msg~`", __FILE__, __LINE__);`;
>     }
> } else {
>     template Trace(char[] str="") {
>         const char[] Trace = "";
>     }
> }
> 
> Zero overhead tracing when disabled, file and line number automatically 
> supplied when enabled.

Ah, I hadn't realize that this does solve the "point of instantiation" 
expansion with __FILE__ and __LINE__ <g>.

> 
> But just from trying to do this little thing, it's pretty clear to me 
> that "my head asplode" if I have to write too much of this kinda thing 
> without a better string literal syntax geared to this.
> 
> Something like:
>       const char[] Trace =
> """
> writefln("%s(%s): @(msg)", __FILE__, __LINE__);
> """
> ;
> 
> Would be much less likely to make me want to scratch my eyes out.

Yes, a better string literal syntax will probably have to be devised.

> Also a little buglet --
> You can call the above like
>    mixin(Trace!("a_function"));
> or
>    mixin(Trace!());
> 
> But this doesn't work:
>    mixin(Trace);

It's not a bug, it's as designed.



More information about the Digitalmars-d mailing list