すみません、>>984, >>990を元にポインタ変換をつくたんですけど
これで、ポインタ間変換以外はエラーで且つ、T* t = auto_cast(X* x);
な使い方できますか?

template<class T> class auto_cast_type {
 void* value;
public:
 auto_cast_type(T* x) : value(x) {}
 template<class U> operator U () { return static_cast<U>(value); }
};
template<class T> inline auto_cast_type<T> auto_cast(T* x) { return x; }

ところで、下記は何をやっているんですか? で、どこで呼ばれるのですか?
template<class U> operator U () { ... }