在 C++17 中为非标准布局类"conditionally-supported""偏移"意味着什么?



C 17标准在[support.types.layout]中说:

使用offsetof宏与A 标准layout类外的类型类是有条件支持的。

和[defns.cond.supp]:

有条件地支持

程序构造,不需要实施才能支持

我发现offsetof的这个定义不是很精确。

  • 这是否意味着我可以安全地尝试与非标准layout类一起使用?

  • "有条件支撑"与定义的实现有何不同?

  • 编译器是否不支持offsetof,用于产生诊断所需的特定类型类型?

这是否意味着我可以安全地尝试与非标准layout类一起使用?

如果实现允许。有条件地支持意味着必须记录下来。

"有条件支持"与定义的实现有何不同?

引用此标准:

[defns.cond.supp]有条件支持的 - "程序构造,不需要实现来支持"

[defns.impl.defined]实现定义的行为 - "对于良好形式的程序构建和正确的数据,取决于实现和每个实施文档"

关键区别是实现的选择。完全按照标准所说的,或者根本不做。VS.以几种方式之一进行操作,无需拒绝。

编译器是否不支持offsetof来生产诊断所需的特定类型类型?

如果这是一个符合的实施,它将发布诊断([Into.comliance]/2.2 @t.c。):

"如果程序包含违反任何可诊断规则或本文档中描述的构造的发生,则在实施不支持该构造时,将其构造为"有条件支持",则符合符合的实现应至少发行一个诊断消息。"

相关内容

  • 没有找到相关文章

最新更新