That works too. I think I like the solution above better for now, I just have to figure out how to generalise it into a template mixin so I don't have to write it out over and over again.
Atila On Friday, 4 April 2014 at 14:24:55 UTC, Dicebot wrote:
On Friday, 4 April 2014 at 09:22:16 UTC, Atila Neves wrote:enum hasAccept(T) = is(typeof(() { auto s = T(); auto foo = FooVisitor(); s.accept(foo); auto bar = BarVisitor(); s.accept(bar); }));I have lately started to favor separated asserts as opposed to combined constraints:mixin template hasAccept(T) { static assert ( is(typeof(() { auto s = T(); })), "Can't create instance of " ~ T.stringof ); static assert ( is(typeof(FooVisitor)), "FooVisitor is not defined" ); // .. and so on }It is much less elegant and does not fix issue fundamentally but speeds up debugging for end user of the library quite a lot.
