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() {}
class B : public A {
public:
void foo() override {}
};
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)
Both snippets should generate a compiler error about overiding a final
function. This seems like a compiler bug. gcc 4.9.2 compiles and gcc 4.9.3 generates an error.