Tempated class instantiation

Simen kjaeraas simen.kjaras at gmail.com
Wed Dec 16 01:26:23 PST 2009


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


More information about the Digitalmars-d-learn mailing list