Re: Checking if something is a template specialization?

2011-02-18 Thread Lars T. Kyllingstad
On Fri, 18 Feb 2011 02:02:51 +, 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.
}
}


Re: Checking if something is a template specialization?

2011-02-18 Thread Sean Eskapp
== Quote from Lars T. Kyllingstad (public@kyllingen.NOSPAMnet)'s article
 On Fri, 18 Feb 2011 02:02:51 +, 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!


Checking if something is a template specialization?

2011-02-17 Thread Sean Eskapp
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?