Inferring function argument types from other argument types

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Mon Nov 12 10:53:09 PST 2012


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)?


More information about the Digitalmars-d-learn mailing list