scalar typeに対する明示的デストラクタ呼び出し

http://www.tietew.jp/cppll/archive/11007
http://www.tietew.jp/cppll/archive/11008
( ・∀・)つ〃∩ ヘェーヘェーヘェー
scalar typeに対してユーザ定義のクラスと同じ構文を持つコンストラクタ呼び出しを書くことが可能なのと同様に,scalar typeに対して明示的なデストラクタ呼び出しと同じ構文を書くことが許されてるのねん.こういうのって汎用プログラミングでは重要だからなぁ.

typedef int T;

T i = 1;
i.~T();
new (&i) T(2); // destroy-and-reconstructイディオム
               // 詳細は「Exceptional C++」のitem 40, 41を参照
cout << i << endl;


T *pi = static_cast<T *>(::operator new(sizeof(T)));
new (pi) T(3);
cout << *pi << endl;
pi->~T();
::operator delete(pi);

i.~int();みたいに直接scalar typeを書くとダメみたい(追記:ダメなのはVC++7.1だけ?).なんで,typedefかtemplate引数でそれがたまたまscalar typeだった場合だけOKのようですな.
ちなみにscalar typeに対する明示的デストラクタ呼び出しは特にeffectを持ってないみたいですな.