Testing presence of member functions with same name but different signature.
Matthias Walter
xammy at xammy.info
Thu Feb 6 13:32:54 PST 2014
Hi,
I realized the following behavior and want to ask whether this is
expected behavior and if yes, I'd like to know a reason.
The check of MyClass.func(MyClass.A) and MyClass.func(MyClass.B) in the
main() function succeeds, but the alias line *in* the class definition
fails with "template instance main.ConditionalUse!(MyClass) does not
match template declaration ConditionalUse(T) if (hasFuncs!T)".
If I rename func to funcA and funcB (making the name unambiguous), both
checks succeed.
Is this a bug?
template hasFuncs(T) // Checks presence of T.func(T.A) and T.func(T.B)
{
enum bool hasFuncs =
is(typeof((T t, T.A a){ t.func(a); }))
&&
is(typeof((T t, T.B b){ t.func(b); }));
}
struct ConditionalUse(T) if (hasFuncs!T) { }
// This line fails with
//
// template instance main.ConditionalUse!(MyClass) does not
// match template declaration ConditionalUse(T) if (hasFuncs!T)
class MyClass
{
struct A {}
struct B {}
alias ConditionalUse!MyClass Foo;
void func(A a) { }
void func(B b) { }
}
int main(char[][] args)
{
static assert(hasFuncs!MyClass); // This assert is fine.
return 0;
}
Best regards,
Matthias
More information about the Digitalmars-d
mailing list