为什么我们没有偏移量适用于所有类型(具有虚拟继承的类型除外)?

gez*_*eza 4 c++

目前,offsetof仅适用于标准布局类型.但是,我从来没有理解这个限制.当然,对于具有虚拟继承的类型,offsetof无法工作.但对于没有虚拟继承的类型,它可以.我知道,该标准允许非标准布局类型为每个实例具有不同的成员偏移量.但是,我从来没有听说过任何使用它的编译器实现.为什么会这样做?

我所知道的所有编译器,对于没有虚拟继承的类型,成员的偏移量是编译时常量.

所以问题是:

  • 是否有任何编译器,其成员的偏移量不是编译时常量(对于没有虚拟继承的类型)?
  • 委员会为何不放宽要求offsetof

(我在stackoverflow中已经阅读了很多相关的答案,并在各个地方进行了讨论,但我还没有找到原因).

Dav*_*ing 6

委员会在7月讨论了这种限制的任意性质.它还没有在工作文件中,但我相信它会在C++ 20中放松(至少在这个程度上).