在非多态类型的情况下,dynamic_cast<void*> 是否保证有效(即等于 static_cast<void*>)?

Is a dynamic_cast<void*> guaranteed to work (i.e. be equal to static_cast<void*>) in the case of a non-polymorphic type?

自从阅读 this question 后我知道 dynamic_cast<void*> 是检查对象指针的真实身份并确保任何基指针也将与最派生的(转换后)同等比较的最佳方法.

我不确定的是,此转换在非多态情况下给出了明确且有用的结果。如果没有,我可以解决这个问题还是这是一个绝望的情况?

我想问的是这是否定义明确:

class A {};
class B : public A {};

int main()
{
  A a;
  B b;
  A* base_ptr = &b;

  void* pointer = dynamic_cast<void*>(&a); // is this value well-defined?

  if(dynamic_cast<void*>(&b) == dynamic_cast<void*>(base_ptr))
    std::cout << "Is this undefined or not?";
}

此代码 doesn't compile 因此不会产生任何值,无论是否明确定义。它与

冲突

[expr.dynamic.cast]/6 Otherwise, v shall be a pointer to or a glvalue of a polymorphic type.