clang: keine out-of-line virtuellen Methodendefinitionen (reine abstrakte C ++ Klasse)

Ich versuche, den folgenden einfachen C ++ - Code mit Clang-3.5 zu kompilieren:

test.h:

class A
{
  public:
    A();
    virtual ~A() = 0;
};

test.cc:

#include "test.h"

A::A() {;}
A::~A() {;}

Der Befehl, den ich zum Kompilieren verwende (Linux, uname -r: 3.16.0-4-amd64):

$clang-3.5 -Weverything -std=c++11 -c test.cc

Und der Fehler, den ich bekomme:

./test.h:1:7: warning: 'A' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]

Irgendwelche Hinweise, warum dies eine Warnung ausgibt? Der virtuelle Destruktor ist überhaupt nicht inline. Im Gegenteil, in test.cc finden Sie eine Out-of-Line-Definition. Was vermisse ich hier?

Bearbeite

Ich glaube nicht, dass diese Frage ein Duplikat von: @ iWas ist die Bedeutung von clang's -Wweak-vtables? wie Filip Roséen vorgeschlagen hat. In meiner Frage beziehe ich mich speziell auf reine abstrakte Klassen (im vorgeschlagenen Duplikat nicht erwähnt). Ich weiß wie-Wweak-vtables arbeitet mit nicht abstrakten Klassen und ich bin damit einverstanden. In meinem Beispiel definiere ich den Destruktor (der rein abstrakt ist) in der Implementierungsdatei. Dies sollte verhindern, dass Clang Fehler ausgibt, auch wenn-Wweak-vtables.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage