On Friday, 29 January 2016 at 15:28:29 UTC, Adrian Matoga wrote:
How can I reliably test if CallsFoo can be instantiated?
You can use a constraint to prevent invalid instantiation: struct HasFoo { void foo() {} } struct NoFoo {} struct CallsFoo(T) if (__traits(hasMember, T, "foo")) { T t; void bar() { t.foo(); } } static assert(is(CallsFoo!HasFoo)); static assert(!is(CallsFoo!NoFoo));