我有以下几点: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