www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Finding out if T is a specialization of another template

reply Sean Eskapp <eatingstaples gmail.com> writes:
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.
    }
}
Feb 18 2011
parent reply "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
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
Feb 18 2011
next sibling parent Sean Eskapp <eatingstaples gmail.com> writes:
== 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.
     }
 }

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.
Feb 18 2011
prev sibling parent "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
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.
     }
 }

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
Feb 18 2011