我如何找到删除或更改特定要求的C ++标准修订版?

时间:2019-01-12 16:49:05

标签: c++ language-lawyer std

让我举一个具体的例子,使我的意思更清楚。

我有两个C ++标准草案:N4296现在已经很旧了,而最新的修订版是N4750。有一些我感兴趣的小节,例如[unord.hash]。版本N4296从std::hash开始要求提供两个嵌套类型argument_typeresult_type,但是N4750中不再存在此要求。

我如何找到修订版本,删除了此要求的地方及其动机?

2 个答案:

答案 0 :(得分:15)

您可以使用的另一个来源是cppreference。他们在显示标准的不同版本中有什么不同方面做得很好。例如,std::hash页面列出了argument_typeresult_type在C ++ 17中已弃用,在C ++ 20中已删除。有了这些信息,您至少知道删除操作是在C ++ 17和C ++ 20之间的标准版本中发生的,要查找的版本要少得多。

此外,至少在some sections中,如果存在缺陷报告,则页面上还将有指向该缺陷报告的链接。

您仍然必须进行一些狩猎,但是希望这可以为您缩小范围。

答案 1 :(得分:12)

这实际上很难。

个人修订

首先,这里有closed core language issues的列表(以及与图书馆问题相对应的页面),为您提供了paper参考和一些日期信息。

the working group's mailings

the standard's source的历史可以使用Git工具及其朋友来检查。理论上的提交日志应该很有用-尽管我建议记下每个标准的最终草案的名称(例如“ N3690” 这样的单词),以便您可以在标签列表中识别它。

如果您确实是在寻找引入了更改的特定修订版,这是最好的选择。

在标准之间

当试图确定引入哪个标准时,我个人倾向于打开单独的标准文档并进行自己的可视化。如果您知道功能的措辞在标准中的位置,并且措辞大都在一个地方分隔开,尽管这样做仍然很费时,但这样效果很好。

出于激励目的,您将寻找原始的建议书。如果您设法找到进行更改的修订草案,则希望有人会交叉引用该提案的名称/ ID。

我还发现,如果您对此内容已经含糊不清,那么Google在搜索时会给一些好的结果。 “ C ++,如果为一致的建议而声明定义”。

而且,如果您不介意非权威性的资料(尽管应该是可靠的),通常会有Stack Overflow答案来跟踪C ++标准之间的变化,并提供相关论文的链接。例如,this answer to "What are the new features in C++17?",它引用了您提到的对std::hash的更改。