placement newについてなんですけど

template <class T> ・・・
{
T *p = new (buffer) T(arg);

p->~T();

operator delete (p, buffer);

p = 0;
}
上記のような流れが正しい扱い方だと思うんですが、以下の場合どう書くべきなのか困ってます

�@T *p;ではなくconst T *p;にした場合
operator delete (p, buffer);の引数は非constなのでコンパイルできない
const_castを使うほかないと思うんですが、それって作法としてはどうなのかな、と

�ATがメンバにoperator delete (void *, void *);を持っている場合
TMPを使って適切に呼び出すことは可能ですが、C++を開発した人が最初からTMPを前提にplacement new/deleteを用意したとは思えません
TMPを使わずに適切なoperator deleteを呼び出すことは可能でしょうか?