0

Der folgende Beispielcode kompiliert sauber in MSVC 2012:Lint (Klirren) Beschwerden über 'Überschreibung' in Spezialisierung

struct S1 
{ 
    virtual void f() {} 
}; 

template<typename T> struct S2 : S1 
{ 
    void f() override {} 
}; 

template<> void S2<int>::f() override {} 

Allerdings, wenn ich PC-Lint Plus-Lauf auf dem Code (die auf Clang basiert) es meldet Fehler:

template<> void S2<int>::f()^ override {} 
test.cpp(11): error 4645: expected ';' at end of declaration 
template<> void S2<int>::f() override {}^ 
test.cpp(11): error 4933: expected ';' after top level declarator 

Übrigens, wenn ich die override Spezifizierer entfernen, Fussel eine Notiz aussendet, dass es fehlt.

Ist das ein Flusen/CLang Bug oder mache ich etwas falsch?

+1

Sie sollten nicht 'virtual' /' override'/'final' in der Definition, nur in der Deklaration. – Jarod42

+0

Also ist MSVC2012 falsch in der Annahme der "override"? –

Antwort

1

Sie benötigen nur die override in der Funktionsdeklaration, nicht in der Out-of-Class-Definition. Einfach entfernen: