On 11/16/2013 12:42 AM, rumbu wrote:

> interface I
> {
>      void foo(T)(T t);

Hm? What would the meaning of that declaration be? Would the interface be happy with any instantiation of foo?

> }
>
> class C: I
> {
> }
> //bug 1: compiler does not complain about the fact that C doesn't
> implement foo(), even if C is instantiated somewhere.

Considering that foo() itself is not an implementation, the compiler could not complain about the lack a specific instantiation like foo!int or foo!MyStruct. Which one is missing? :)

> void bar(I i)
> {
>      i.foo(2);
> }
> //bug 2: Error 42: Symbol Undefined _D4main1I10__T3fooTiZ3fooMFiZv (void
> main.I.foo!(int).foo(int))
>
> dmd 2.064.2 windows.
>
> I suppose that these two are related.
> Are these bugs or it's not possible to have templated functions in an
> interface?

All I can see is that it would be a very flexible interface function: "There is this foo() that you can call on this interface but consult with the implementing classes whether your specific instance exists." :)

On the other hand, an interface template makes sense to me:

interface I(T)
{
    void foo(T t);
}

That would mean that an I!MyStruct guarantees that it support foo(MyStruct).

Ali

Reply via email to