/* REQUIRED_ARGS: -dw
 * PERMUTE_ARGS:
 * TEST_OUTPUT:
---
compilable/fix17349.d(37): Deprecation: cannot implicitly override base class method `fix17349.E.foo` with `fix17349.F.foo`; add `override` attribute
---
 */

// https://issues.dlang.org/show_bug.cgi?id=17349

struct S { }

class C {
    void bar();
    void foo(void* p);
    void abc(Object);
    void def(S);
}

class D : C {
    override void bar() const;
    override void foo(const void*);
    override void abc(const Object);
    override void def(const S);
}

alias fp_t = void function(int*);
@safe void abc(const int*);
fp_t fp = &abc;


class E {
    void foo(void*);
}

class F : E {
    void foo(const void*);
}


