Static override?
Atila Neves
atila.neves at gmail.com
Fri Apr 4 04:43:49 PDT 2014
That gives me this:
static_override.d(22): Error: variable
static_override.Struct.hasAccept!(Struct).hasAccept had semantic
errors when compiling
Which is better than before but still hiding the actuall error.
But this works as expected:
template hasAccept(T) {
static iface(CT)(CT t) {
auto foo = FooVisitor();
t.accept(foo);
auto bar = BarVisitor();
t.accept(bar);
}
static if (is(typeof(iface!T)))
enum hasAccept = true;
else {
private static void func() {
iface(T());
}
}
}
Atila
On Friday, 4 April 2014 at 10:55:53 UTC, Artur Skawina wrote:
> On 04/04/14 11:22, Atila Neves wrote:
>> enum hasAccept(T) = is(typeof(() {
>> auto s = T();
>> auto foo = FooVisitor();
>> s.accept(foo);
>> auto bar = BarVisitor();
>> s.accept(bar);
>> }));
>
>> The static asserts are there to verify that the structs I
>> define actually do implement the interface I want them to.
>> Which is great when they work, but tricky to find out why they
>> don't when the assert fails.
>
> template hasAccept(T) {
> static iface(CT)(CT t) {
> auto foo = FooVisitor();
> t.accept(foo);
> auto bar = BarVisitor();
> t.accept(bar);
> }
> static if (is(typeof(iface!T)))
> enum hasAccept = true;
> else
> enum hasAccept = &iface!T;
> }
>
> [Should probably be split into three parts: 1) the
> if-definition, 2) the
> does-T-implement-the-if check, and 3) the
> T-must-implement-the-if assertion.]
>
> artur
More information about the Digitalmars-d
mailing list