www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - scope keyword within template mixins

Hi D users,

I created/tested a little logging class under DMD 1.062:

//-------------------------------------------------------------------------
//
// helper class for debugging/logging
//
import std.string;
import std.stdio;

scope class LogEnter
{
   static int mIndent;
   static char[] doindent()
   {
     return "\n" ~ repeat(" ", mIndent);
   }

   this(char[] text)
   {
     mText = text;
     writef(doindent() ~ "<" ~ mText ~ ">");
     mIndent += 2;
   }

   ~this()
   {
     mIndent -= 2;
     writef(doindent() ~ "</" ~ mText ~ ">");
   }

   char[] mText;
}

//-------------------------------------------------------------------------
//
// logging with scope keyword
//

void C()
{
   scope auto log = new LogEnter("C");
   D();
}

void D()
{
   scope auto log = new LogEnter("D");
}

void main()
{
   // C();
}
//-------------------------------------------------------------------------

Together with the scope keyword this works as expected. The output looks 
like:
<C>
   <D>
   </D>
</C>

After that I tried to move the LogEnter instantiation into a template 
mixin, as follows:

//-------------------------------------------------------------------------
//
// logging via template mixin
//
template Log(char[] msg)
{
   scope auto log = new LogEnter(msg);
}

void A()
{
   mixin Log!("A");
   B();
}

void B()
{
   mixin Log!("B");
}

void main()
{
   A();
}
//-------------------------------------------------------------------------

I get the following output:

<A>
   <B>

IMO the template mixin variant should behave the same. Did I miss 
something or is this a bug ?
I already searched bugzilla for similar bugs, but I found none.
Thanks in advance for your help

KlausO
Jun 28 2010