Tempated class instantiation

Mike L. sgtmuffles at myrealbox.com
Wed Dec 16 12:41:04 PST 2009


Simen kjaeraas Wrote:

> On Wed, 16 Dec 2009 07:25:39 +0100, Mike L. <sgtmuffles at myrealbox.com>  
> wrote:
> 
> > I'm making a class template that only works with strings, so I thought  
> > it'd be good to instantiate each template with char, wchar, and dchar  
> > right in the template's module so that when it's compiled it'll be part  
> > of the .obj file and won't have to compile it for every other project  
> > that uses it. However, I get an error reproducible with this:
> >
> > module test;
> >
> > class A(T)
> > {
> > 	version(broken)
> > 	{
> > 		class B
> > 		{
> > 			T blah() { return t; }
> > 		}
> > 	}
> > 	
> > 	T t;
> > }
> >
> > mixin A!(int);
> >
> > int main()
> > {
> > 	A!(int) a = new A!(int)();
> > 	return 0;
> > }
> >
> > If what I want to do makes sense, how should I be doing it?
> 
> It makes sense. Seems to be another compiler bug, but I have
> no good overview of which (might even be a new one).
> This compiles and runs:
> 
> class A(T)
> {
>      version(broken)
>      {
>          class B
>          {
>              // Explicitly state which t we're talking about.
>              T blah() { return this.outer.t; }
>          }
>      }
> 
>      T t;
> }
> 
> mixin A!(int);
> 
> int main()
> {
>      A!(int) a = new A!(int)();
>      return 0;
> }
> 
> 
> -- 
> Simen

Thanks for the reply, that seems to be working for my project too, but the code gets really ugly really fast. Should I submit a bug report?

--Mike L.


More information about the Digitalmars-d-learn mailing list