Im folgenden einfachen Code-Fragment gelöscht wird:Clang beschwert „kann nicht eine gelöschte Funktion außer Kraft setzen“, während keine Funktion
#include <cstddef>
struct B
{
virtual ~B() = default;
static void operator delete(void *, int);
static void * operator new(size_t, int);
};
struct C : B
{
virtual ~C() = default;
};
Klirren 3.7 beklagt, dass „nicht-gelöschte Funktion‚~ C‘nicht eine gelöschte Funktion außer Kraft setzen kann“
Weder Visual Studio noch GCC melden einen Fehler in diesem Code. Ist es ein klingender Defekt oder was?
mit korrekten Signaturen, es kompiliert – sp2danny
Ich gehe davon aus, dass Clang sie auf der Grundlage des dritten Aufzählungspunkt lehnt in [\ [class.dtor \]/5] (http://eel.is/c+ + Entwurf/class.dtor # 5). Ich bin mir nicht ganz sicher, ob das die richtige Lektüre ist. –
ist es richtig, es nicht zu kompilieren, aber die Fehlermeldung ist weniger als hilfreich – sp2danny