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;
}
void main()
{
auto foo = new Foo!(size_t, real)(3, 2.5);
writeln(foo.func(4));
}
- Vijay
On Monday, 12 November 2012 at 13:13:56 UTC, Joseph Rushton
Wakeling wrote:
On 11/12/2012 02:02 PM, bearophile wrote:
Like this?
Thanks for the thought, but not really :-( Your code _checks_
that the second argument has the correct type, but it doesn't
perform an implicit conversion where that is possible.
In a pseudo-code-y sense, what I want to be able to do is
something like:
auto func(FooT)(FooT foo, FooT.T1 x)
{
...
}
and indeed I tried that on the off-chance that it'd work; but
it fails to compile with an error message "Undefined identifier
FooT.T1".
All of the messing around with a second template argument was
just in order to be able to achieve something equivalent to the
above.