boost::remove_pointer
すげぇ。
template<typename T> inline T FNTNetPacket_safecast(FNTNetPacket* p) { if(p->getType() != boost::remove_pointer<T>::type::msgtype) FECTI_THROWEX(FEX_SOCKET, FEXS_SOCKET_FECTIP, "invalid cast"); return reinterpret_cast<T>(p); }
メンバ関数テンプレートにしていないのはバグがある実装が多いため。