Thread overview
Checking if something is a template specialization?
Feb 18, 2011
Sean Eskapp
Feb 18, 2011
Sean Eskapp
February 18, 2011
If I have

class Bar(T)
{
}

void foo(Y)()
{
   ...
}

Is there a way to check inside foo() that Y is in some way an instantiation of Bar? Is there a way to find WHICH instantiation it is?
February 18, 2011
On Fri, 18 Feb 2011 02:02:51 +0000, Sean Eskapp wrote:

> If I have
> 
> class Bar(T)
> {
> }
> 
> void foo(Y)()
> {
>    ...
> }
> 
> Is there a way to check inside foo() that Y is in some way an instantiation of Bar? Is there a way to find WHICH instantiation it is?


void foo(Y)()
{
    static if (is(Y Z == Bar!Z))
    {
        // Here, Z is now an alias to whichever type Bar is
        // instantiated with.
    }
    else
    {
        // Z is invalid here.
    }
}
February 18, 2011
== Quote from Lars T. Kyllingstad (public@kyllingen.NOSPAMnet)'s article
> On Fri, 18 Feb 2011 02:02:51 +0000, Sean Eskapp wrote:
> > If I have
> >
> > class Bar(T)
> > {
> > }
> >
> > void foo(Y)()
> > {
> >    ...
> > }
> >
> > Is there a way to check inside foo() that Y is in some way an instantiation of Bar? Is there a way to find WHICH instantiation it is?
> void foo(Y)()
> {
>     static if (is(Y Z == Bar!Z))
>     {
>         // Here, Z is now an alias to whichever type Bar is
>         // instantiated with.
>     }
>     else
>     {
>         // Z is invalid here.
>     }
> }

Perfect, thanks!