テンプレートパラメータの型定義のデストラクタを呼び出します。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
せずに行うようにするどのような方法がありますができますか?
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::~_X(); // This as well
}
};
int main(){
B<A<int> > b;
b.call_destructor();
}
面白いことに、これはしかしクランでは動作しないということです。それがバグか、あまりにも悪いルールがあるのかどうかは分かりません。 – Brian
実際、最初はgccで試してみました。これは私にとって謎です。 – Flynsee