On 11/12/2012 04:38 PM, Vijay Nayar wrote:
I think this is what you want.  This example compiled and ran using DMD v2.060.

FooType.T1 func(FooType, FooT1)(FooType foo, FooT1 x)
   if (is(FooType.T1) && is(FooT1 : FooType.T1))
{
     return x * foo.a;
}

Thanks for that. You're obviously correct to use FooType.T1 as return type here; the reality of what I'm trying to do is slightly more complicated, as the real situation I have is that I'm passing the x value on into another (also templated) function. But of course I can use FooType.T1 for that template value.

I'm still a little disappointed that I can't just insist that a given parameter type should depend on another template parameter. :-(

To be sure I understand your formulation, can you clarify the meaning of is(FooT1 : FooType.T1)?

Reply via email to