Thread overview
Finding out if T is a specialization of another template
Feb 18, 2011
Sean Eskapp
Feb 18, 2011
Sean Eskapp
February 18, 2011
I was given this code, to check if Y is a specialization of Bar. How does it work?

class Bar(T)
{
}

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
On Fri, 18 Feb 2011 17:16:02 +0000, Sean Eskapp wrote:

> I was given this code, to check if Y is a specialization of Bar. How does it work?
> 
> class Bar(T)
> {
> }
> 
> 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.
>     }
> }

I'm not sure what you mean by "how does it work".  If it's the is() expression you're wondering about, it's documented here:

http://www.digitalmars.com/d/2.0/expression.html#IsExpression

-Lars
February 18, 2011
== Quote from Lars T. Kyllingstad (public@kyllingen.NOSPAMnet)'s article
> On Fri, 18 Feb 2011 17:16:02 +0000, Sean Eskapp wrote:
> > I was given this code, to check if Y is a specialization of Bar. How does it work?
> >
> > class Bar(T)
> > {
> > }
> >
> > 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.
> >     }
> > }
> I'm not sure what you mean by "how does it work".  If it's the is() expression you're wondering about, it's documented here: http://www.digitalmars.com/d/2.0/expression.html#IsExpression -Lars

Ah, yes. I'd checked the is documentation, but whenever I tried using that is expression outside of an if statement, it complained about my usage, so I assumed it had something to do with if statements.
February 18, 2011
On Fri, 18 Feb 2011 20:37:38 +0000, Sean Eskapp wrote:

> == Quote from Lars T. Kyllingstad (public@kyllingen.NOSPAMnet)'s article
>> On Fri, 18 Feb 2011 17:16:02 +0000, Sean Eskapp wrote:
>> > I was given this code, to check if Y is a specialization of Bar. How does it work?
>> >
>> > class Bar(T)
>> > {
>> > }
>> >
>> > 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.
>> >     }
>> > }
>> I'm not sure what you mean by "how does it work".  If it's the is() expression you're wondering about, it's documented here: http://www.digitalmars.com/d/2.0/expression.html#IsExpression -Lars
> 
> Ah, yes. I'd checked the is documentation, but whenever I tried using that is expression outside of an if statement, it complained about my usage, so I assumed it had something to do with if statements.

Yeah, is() has a few extra features when it's combined with 'static if'. :)

-Lars