C++03 標準 (C++11 標準が異なるとは思えません) には、次の段落 (C++03 14.3/5 [temp.arg]) があります。
クラス テンプレートの特殊化である型を持つオブジェクトの明示的なデストラクタ呼び出し (12.4) では、template-argumentsを明示的に指定できます。【例:
template<class T> struct A {
~A();
};
void f(A<int>* p, A<int>* q) {
p->A<int>::~A(); // OK: destructor call
q->A<int>::~A<int>(); // OK: destructor call
};
--終わりの例]
条項 12.4/12 [class.dtor] では、通常のメンバー関数の呼び出しに関して明示的なデストラクタ呼び出しについて説明し、デストラクタの型の修飾バージョンと非修飾バージョンの両方を使用した明示的なデストラクタ呼び出しを示す例を示しています。
私にとって、これは、標準の意図がそれぞれの
A<int> * a = new A<int>();
a->~A();
a->~A<int>();
a->A<int>::~A();
a->A<int>::~A<int>();
有効である必要があります。最初の 2 つが 14.4/12 の例で言及されていないという事実は、例が規範的ではないため、これに影響を与えるべきではありません。