Evaluating __FILE__ and __LINE__ of caller?

Adam D. Ruppe destructionator at gmail.com
Fri Mar 2 18:33:46 PST 2012


On Saturday, 3 March 2012 at 02:19:55 UTC, Andrej Mitrovic wrote:
> Right, but what about template bloat?

You don't have to use templates at all. The __FILE__
and __LINE__ default params work in regular functions.

             // not a template, just regular parameters
void awesome(string file = __FILE__, int line = __LINE__) {
         printf("called from %s:%d", file, line);
}


They are passed as runtime parameters at the call site:

   push    dword ptr _TMP1 at SYM32[09h] ; the file is pushed here
   push    dword ptr _TMP1 at SYM32[0Bh]
   mov     EAX,8  ;  and the __LINE__ is here
    ; now it calls the function, note that it is the same
    ; call all three times
   call      _D5test97awesomeFAyaiZv at PC32
   push    dword ptr _TMP1 at SYM32[01Fh]
   push    dword ptr _TMP1 at SYM32[021h]
   mov     EAX,9
   call      _D5test97awesomeFAyaiZv at PC32
   push    dword ptr _TMP1 at SYM32[035h]
   push    dword ptr _TMP1 at SYM32[037h]
   mov     EAX,0Ah
   call      _D5test97awesomeFAyaiZv at PC32


No template bloat if you don't use a template!


More information about the Digitalmars-d-learn mailing list