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