I use:
template<class T1, class T2>
inline T1& castRef(T2& t) {
assert(dynamic_cast<T1*>(&t)!=0);
return static_cast<T1&>(t);
}
template<class T1, class T2>
inline T1* castPtr(T2* t) {
assert(t==0||dynamic_cast<T1*>(t)!=0);
return static_cast<T1*>(t);
}
Vladimir