Johannes Pfau wrote something like this, in the logger thread:

If you write code like this:

void log(string file = __FILE__)() //A template
{
  logImpl(file);
}
void logImpl(string file){} //Not a template

The compiler can always inline the log template. So there's no
template bloat as there will be effectively no instances of log.
Instead it will be inlined and logImpl will be called directly just as
if you manually called logImpl(__FILE__).

I'm trying something like that, but with __LINE__ in addition to put a little more pressure:

void log(string file = __FILE__, int line = __LINE__)(){ logImpl(file, line); }
    void logImpl(string file, int line){}

I've then compiled a single file filled with 'log()', but I've found from 'nm' that the text section is still full of templated functions.

So the question is: is Johannes trick supposed to work, or there's something I don't understand well about template expansion and inlining?

Thanks, Paolo

Reply via email to