我有以下幾點:C++:顯式調用模板參數的類型定義的析構函數
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
}
};
不編譯,說
限定的類型不匹配析構函數名
在通話之前使用關鍵字typename
也不起作用。但是,下列情況編譯:
template <typename Y> struct B {
typename Y::_X x;
typedef typename Y::_X __X;
void call_destructor() {
x.~__X(); // This works
}
};
有人能向我解釋爲什麼,有沒有什麼辦法讓離不開typedef
?
有趣的是,這並不在鏘的工作,雖然。我想知道這是一個錯誤還是有一些模糊的規則,爲什麼它不健康。 – Brian
的確,我最初只是用gcc試過。這對我來說是個謎。 – Flynsee