我有两节课:
struct Base
{
int a;
};
template<typename T>
struct Derived : Base
{};
Run Code Online (Sandbox Code Playgroud)
它们的布局兼容吗?
C++11 标准表示 ([class.mem]/16):
如果两个标准布局结构(第 9 条)类型具有相同数量的非静态数据成员,并且相应的非静态数据成员(按声明顺序)具有布局兼容的类型,则它们是布局兼容的。
但它也说([class.衍生] / 8):
基类子对象的布局 (3.7) 可能与同一类型的最派生对象的布局不同。
这让我很困惑。
笔记:
此项检查
static_assert(__is_layout_compatible(Base, Derived<int>), "");
Run Code Online (Sandbox Code Playgroud)
传递给 GodBolt(编译器 - x86-64 gcc(trunk))。