Mit CRTP manchmal schreibe ich einen Code wie folgt:Wie vermeidet man Fehler bei der Verwendung von CRTP?
// this was written first
struct Foo : Base<Foo, ...>
{
...
};
// this was copy-pasted from Foo some days later
struct Bar : Base<Foo, ...>
{
...
};
Und es ist sehr schwer zu verstehen, was schief geht, bis ich Code in Debugger verfolgen und sehen, dass nicht Bar-Mitglieder in Base
verwendet werden.
Wie wird dieser Fehler zur Kompilierzeit angezeigt?
(ich benutze MSVC2010, so kann ich einige C++ 0x-Features und MSVC Spracherweiterungen verwenden)
eigentlich funktioniert es nicht, wenn der dtor nie aufgerufen wird. – Abyx
@Abyx: Interessanterweise mit GCC 4.9, wenn ich Placement neu verwenden, um ein Objekt des Typs 'Struktur S: Basis {}' zu konstruieren, beschwert sich über den * Konstruktor * 'S :: S()' implizit gelöscht werden '~ base' ist privat. In diesem Fall wird der Destruktor jedoch nie aufgerufen. –
Interessantererweise klagen gcc 4.8.1 überhaupt nicht! –