lundi 2 avril 2018

final specifier has no effect with separate declaration and definition

I noticed some strange behaviour with final keyword. When I do:

class A {
public:
    virtual ~A() = default;
    virtual void foo() final {}
};

class B : public A {
public:
    void foo() override {}
};

I get compiler error on overriding foo in B as I would expect. But when I make separate definition and declaration of A::foo

class A {
public:
    virtual ~A() = default;
    virtual void foo() final;
};

void A::foo() {}

the error is gone. Is it as it should be or a compiler bug?

//edit: gcc version 4.9.2 (Debian 4.9.2-10+deb8u1)

Aucun commentaire:

Enregistrer un commentaire