Try this:
interface I {}
class C : I {}
class D {}
struct S {}
pragma(msg, is(C : I)); // true
pragma(msg, is(D : I)); // false
pragma(msg, is(S : I)); // false
So probably what you want is something like this:
void register(C, ARGS...)(ARGS args)
if (behavesLikeFoo!C || is(C : IFoo))
...
T
--
Change is inevitable, except from a vending machine.
