【发布时间】:2015-05-02 00:51:55
【问题描述】:
[basic.def.odr]/2 中的示例以以下句子开头:
在以下示例中, n 的初始化器包含第一个 S::x 子表达式,但不包含 第二个 S::x 子表达式。
根据本段的定义,我们如何推断 n 的初始化器包含第一个 S::x 子表达式,但不包含第二个 S::x 子表达式?
编辑 见下文上述示例的其余部分:
struct S { static const int x = 0; };
const int &f(const int &r);
int n = b ? (1, S::x) // S::x is not odr-used here
: f(S::x); // S::x is odr-used here, so
// a definition is required
【问题讨论】:
-
没有 C++14 标准的人无法回答这个问题。您可以通过显示您所询问的代码来提供帮助。那么它可以由没有访问 C++14 标准但了解 C++14 标准的人来回答。
-
@JonathanLeffler 对于使用(仅)C++14 标准的人来说这是无法回答的。此示例仅出现在较新的草稿中(可公开获得)。但我同意这个例子应该是问题的一部分。
-
@dyp:所以tag和title不对(应该是C++17),问题应该指向最近的草稿,大家需要参考一下。基本上,当您提出问题时,您需要帮助人们帮助您!它也从根本上改变了这个问题。如果是草稿,规范中仍然可能存在错误。如果它在标准中,则不太可能(尽管并非不可能)。
-
这个出现在n4140,也就是C++14。顺便说一句,“我们如何推断 n 的初始化程序包含”是不正确的——这与初始化程序包含的内容无关,而与它返回的内容有关(可能)
-
谢谢,@MattMcNabb:我知道在哪里可以找到这些文件。 AFAIK,目前还没有价格合理的官方(ISO 或 ANSI 或 ...)C++14 PDF 可用(但我本月尚未检查)。使用委员会草案而不是最终标准并不完全安全。这个问题应该对于后续阅读它的人来说是可以理解的——他们不应该去寻找标准来使用答案。很抱歉,这里的问题应该包括示例代码,但不一定不止于此。
标签: c++ language-lawyer c++14