Ich habe folgendes:C++: Explizit nennen destructor von typedef Template-Parameter
template <typename X> struct A {
typedef X _X;
};
template <typename Y> struct B { // Y is struct A
typename Y::_X x;
void call_destructor() {
x.~Y::_X(); // This doesn't work
x.Y::~_X(); // This as well
}
};
, die nicht kompiliert und sagte, dass
qualifizierte Typ nicht Destruktornamen überein
Mit dem Schlüsselwort typename
vor dem Anruf funktioniert auch nicht. Allerdings ist die folgende kompilieren:
template <typename Y> struct B {
typename Y::_X x;
typedef typename Y::_X __X;
void call_destructor() {
x.~__X(); // This works
}
};
Kann mir jemand erklären, warum, und ist es eine Möglichkeit, ohne typedef
auszukommen?
Das Komische ist, dass dies allerdings nicht auf Clang funktioniert. Ich frage mich, ob das ein Käfer ist oder ob es eine obskure Regel gibt, warum es schlecht geformt ist. – Brian
Tatsächlich habe ich es erst mit gcc probiert. Das ist ein Rätsel für mich. – Flynsee