templateでポリモーフィックな型かどうか判別する方法はありますか?
dynamic_castが使えない型にはstatic_castを実行したいのですが、
判別方法が分からず困っています。

やりたい事は↓みたいな事です。

template <bool> void* foo() { return dynamic_cast<void*>(p); }
template <> void* foo<false>() { return static_cast<void*>(p); }

template <typename T>
void* bar(T* p)
{
  return foo<IsPolymorphic::RESULT>(p);
}