让我举一个具体的例子,使我的意思更清楚。
我有两个C ++标准草案:N4296现在已经很旧了,而最新的修订版是N4750。有一些我感兴趣的小节,例如[unord.hash]。版本N4296从std::hash
开始要求提供两个嵌套类型argument_type
和result_type
,但是N4750中不再存在此要求。
我如何找到修订版本,删除了此要求的地方及其动机?
答案 0 :(得分:15)
您可以使用的另一个来源是cppreference。他们在显示标准的不同版本中有什么不同方面做得很好。例如,std::hash
页面列出了argument_type
和result_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
的更改。