How do I find the revision of C++ standard, where a specific requirement was removed or changed?
Let me give a concrete example to make it more clear what I exactly mean.
I have two drafts of C++ standard: N4296 that is quite old now and more recent revision N4750. There are some subsections that I am interested in, e.g. [unord.hash]. Version N4296 requires from std::hash
to provide two nested types argument_type
and result_type
, but this requirement no longer present in N4750.
How can I find the revision, where this requirement was removed and the motivation for it?
c++ language-lawyer std
add a comment |
Let me give a concrete example to make it more clear what I exactly mean.
I have two drafts of C++ standard: N4296 that is quite old now and more recent revision N4750. There are some subsections that I am interested in, e.g. [unord.hash]. Version N4296 requires from std::hash
to provide two nested types argument_type
and result_type
, but this requirement no longer present in N4750.
How can I find the revision, where this requirement was removed and the motivation for it?
c++ language-lawyer std
8
The C++ draft git repository?
– Some programmer dude
Jan 12 at 16:51
1
Are you asking about which version of the standard did this or which draft revision? Because I don't know why the latter would matter to you.
– Nicol Bolas
Jan 12 at 18:11
@NicolBolas, draft revision, because I hoped that it will help me to find the original proposal that explains, why the change was necessary. Let's say that I use the implementation of C++ standard library that does not fulfill certain standard requirements, e.g. hash does not act like unary_function. What consequences it may have? Is it just missing two unnecesary typedef's? How they were intended to be used? Since they are already deprecated, I tend to think that there were some unexpected problems and the proposal could explain them.
– user7122617
Jan 13 at 15:19
1
@user7122617: "because I hoped that it will help me to find the original proposal that explains, why the change was necessary." Finding the specific draft that included a change won't help you find the proposal/defect resolution that suggested it. The drafts won't say why a proposal was accepted or even what the proposal was. If you want to find the original proposal, the best way to do that is to search the WG21 papers site with a Google site-specific search.
– Nicol Bolas
Jan 13 at 16:07
@NicolBolas, it seems that you are right. I've just found open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:20
add a comment |
Let me give a concrete example to make it more clear what I exactly mean.
I have two drafts of C++ standard: N4296 that is quite old now and more recent revision N4750. There are some subsections that I am interested in, e.g. [unord.hash]. Version N4296 requires from std::hash
to provide two nested types argument_type
and result_type
, but this requirement no longer present in N4750.
How can I find the revision, where this requirement was removed and the motivation for it?
c++ language-lawyer std
Let me give a concrete example to make it more clear what I exactly mean.
I have two drafts of C++ standard: N4296 that is quite old now and more recent revision N4750. There are some subsections that I am interested in, e.g. [unord.hash]. Version N4296 requires from std::hash
to provide two nested types argument_type
and result_type
, but this requirement no longer present in N4750.
How can I find the revision, where this requirement was removed and the motivation for it?
c++ language-lawyer std
c++ language-lawyer std
edited Jan 12 at 20:42
Peter Mortensen
13.6k1984111
13.6k1984111
asked Jan 12 at 16:49
user7122617user7122617
1455
1455
8
The C++ draft git repository?
– Some programmer dude
Jan 12 at 16:51
1
Are you asking about which version of the standard did this or which draft revision? Because I don't know why the latter would matter to you.
– Nicol Bolas
Jan 12 at 18:11
@NicolBolas, draft revision, because I hoped that it will help me to find the original proposal that explains, why the change was necessary. Let's say that I use the implementation of C++ standard library that does not fulfill certain standard requirements, e.g. hash does not act like unary_function. What consequences it may have? Is it just missing two unnecesary typedef's? How they were intended to be used? Since they are already deprecated, I tend to think that there were some unexpected problems and the proposal could explain them.
– user7122617
Jan 13 at 15:19
1
@user7122617: "because I hoped that it will help me to find the original proposal that explains, why the change was necessary." Finding the specific draft that included a change won't help you find the proposal/defect resolution that suggested it. The drafts won't say why a proposal was accepted or even what the proposal was. If you want to find the original proposal, the best way to do that is to search the WG21 papers site with a Google site-specific search.
– Nicol Bolas
Jan 13 at 16:07
@NicolBolas, it seems that you are right. I've just found open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:20
add a comment |
8
The C++ draft git repository?
– Some programmer dude
Jan 12 at 16:51
1
Are you asking about which version of the standard did this or which draft revision? Because I don't know why the latter would matter to you.
– Nicol Bolas
Jan 12 at 18:11
@NicolBolas, draft revision, because I hoped that it will help me to find the original proposal that explains, why the change was necessary. Let's say that I use the implementation of C++ standard library that does not fulfill certain standard requirements, e.g. hash does not act like unary_function. What consequences it may have? Is it just missing two unnecesary typedef's? How they were intended to be used? Since they are already deprecated, I tend to think that there were some unexpected problems and the proposal could explain them.
– user7122617
Jan 13 at 15:19
1
@user7122617: "because I hoped that it will help me to find the original proposal that explains, why the change was necessary." Finding the specific draft that included a change won't help you find the proposal/defect resolution that suggested it. The drafts won't say why a proposal was accepted or even what the proposal was. If you want to find the original proposal, the best way to do that is to search the WG21 papers site with a Google site-specific search.
– Nicol Bolas
Jan 13 at 16:07
@NicolBolas, it seems that you are right. I've just found open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:20
8
8
The C++ draft git repository?
– Some programmer dude
Jan 12 at 16:51
The C++ draft git repository?
– Some programmer dude
Jan 12 at 16:51
1
1
Are you asking about which version of the standard did this or which draft revision? Because I don't know why the latter would matter to you.
– Nicol Bolas
Jan 12 at 18:11
Are you asking about which version of the standard did this or which draft revision? Because I don't know why the latter would matter to you.
– Nicol Bolas
Jan 12 at 18:11
@NicolBolas, draft revision, because I hoped that it will help me to find the original proposal that explains, why the change was necessary. Let's say that I use the implementation of C++ standard library that does not fulfill certain standard requirements, e.g. hash does not act like unary_function. What consequences it may have? Is it just missing two unnecesary typedef's? How they were intended to be used? Since they are already deprecated, I tend to think that there were some unexpected problems and the proposal could explain them.
– user7122617
Jan 13 at 15:19
@NicolBolas, draft revision, because I hoped that it will help me to find the original proposal that explains, why the change was necessary. Let's say that I use the implementation of C++ standard library that does not fulfill certain standard requirements, e.g. hash does not act like unary_function. What consequences it may have? Is it just missing two unnecesary typedef's? How they were intended to be used? Since they are already deprecated, I tend to think that there were some unexpected problems and the proposal could explain them.
– user7122617
Jan 13 at 15:19
1
1
@user7122617: "because I hoped that it will help me to find the original proposal that explains, why the change was necessary." Finding the specific draft that included a change won't help you find the proposal/defect resolution that suggested it. The drafts won't say why a proposal was accepted or even what the proposal was. If you want to find the original proposal, the best way to do that is to search the WG21 papers site with a Google site-specific search.
– Nicol Bolas
Jan 13 at 16:07
@user7122617: "because I hoped that it will help me to find the original proposal that explains, why the change was necessary." Finding the specific draft that included a change won't help you find the proposal/defect resolution that suggested it. The drafts won't say why a proposal was accepted or even what the proposal was. If you want to find the original proposal, the best way to do that is to search the WG21 papers site with a Google site-specific search.
– Nicol Bolas
Jan 13 at 16:07
@NicolBolas, it seems that you are right. I've just found open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:20
@NicolBolas, it seems that you are right. I've just found open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:20
add a comment |
2 Answers
2
active
oldest
votes
This can actually be kind of hard.
Individual revisions
First, there's the list of closed core language issues (and the equivalent page for library issues), which gives you a paper reference and some date information.
There's the working group's mailings.
There's the standard's source whose history can be examined using Git tools and their friends. The commit log in theory should be useful — though I recommend noting down the name (e.g. a word like "N3690") of the Final Draft for each standard so that you can recognise it in the tag list.
This is your best bet if you're literally looking for the specific revision where a change was introduced.
Between standards
When trying to determine in which standard the change was introduced, personally I tend to just open up individual standard documents and do my own visual bisection. This works well if you know where the feature's wording is located in the standard, and if the wording is mostly compartmentalised in one place, though it can still be time consuming.
For motivations you'll be looking for the original proposal paper. If you manage to find the draft revision where the change was made, hopefully someone will have cross-referenced the name/ID of the proposal.
I also find that Google gives some good results when searching for this if you already have a vague idea of its contents: e.g. "C++ if declaration definition while for consistent proposal".
And, if you don't mind non-authoritative sources (which should nonetheless be reliable), there are usually Stack Overflow answers that track changes between C++ standards, with links to the relevant papers. For example, this answer to "What are the new features in C++17?", which references the changes to std::hash
that you mention.
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
add a comment |
Another source you can use is cppreference. They do a very good job in showing what is different in the different version of the standard. For instance, the std::hash
page lists that argument_type
and result_type
are deprecated in C++17 and removed in C++20. With that information you at least know that the remove happened in a version of the standard between C++17 and C++20, which is lot less versions to look through.
Additionally, in at least some sections, if there was a defect report there will also be a link to that defect report on the page.
You'll still have to do some hunting, but hopefully this will narrow it down for you.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54161761%2fhow-do-i-find-the-revision-of-c-standard-where-a-specific-requirement-was-rem%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
This can actually be kind of hard.
Individual revisions
First, there's the list of closed core language issues (and the equivalent page for library issues), which gives you a paper reference and some date information.
There's the working group's mailings.
There's the standard's source whose history can be examined using Git tools and their friends. The commit log in theory should be useful — though I recommend noting down the name (e.g. a word like "N3690") of the Final Draft for each standard so that you can recognise it in the tag list.
This is your best bet if you're literally looking for the specific revision where a change was introduced.
Between standards
When trying to determine in which standard the change was introduced, personally I tend to just open up individual standard documents and do my own visual bisection. This works well if you know where the feature's wording is located in the standard, and if the wording is mostly compartmentalised in one place, though it can still be time consuming.
For motivations you'll be looking for the original proposal paper. If you manage to find the draft revision where the change was made, hopefully someone will have cross-referenced the name/ID of the proposal.
I also find that Google gives some good results when searching for this if you already have a vague idea of its contents: e.g. "C++ if declaration definition while for consistent proposal".
And, if you don't mind non-authoritative sources (which should nonetheless be reliable), there are usually Stack Overflow answers that track changes between C++ standards, with links to the relevant papers. For example, this answer to "What are the new features in C++17?", which references the changes to std::hash
that you mention.
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
add a comment |
This can actually be kind of hard.
Individual revisions
First, there's the list of closed core language issues (and the equivalent page for library issues), which gives you a paper reference and some date information.
There's the working group's mailings.
There's the standard's source whose history can be examined using Git tools and their friends. The commit log in theory should be useful — though I recommend noting down the name (e.g. a word like "N3690") of the Final Draft for each standard so that you can recognise it in the tag list.
This is your best bet if you're literally looking for the specific revision where a change was introduced.
Between standards
When trying to determine in which standard the change was introduced, personally I tend to just open up individual standard documents and do my own visual bisection. This works well if you know where the feature's wording is located in the standard, and if the wording is mostly compartmentalised in one place, though it can still be time consuming.
For motivations you'll be looking for the original proposal paper. If you manage to find the draft revision where the change was made, hopefully someone will have cross-referenced the name/ID of the proposal.
I also find that Google gives some good results when searching for this if you already have a vague idea of its contents: e.g. "C++ if declaration definition while for consistent proposal".
And, if you don't mind non-authoritative sources (which should nonetheless be reliable), there are usually Stack Overflow answers that track changes between C++ standards, with links to the relevant papers. For example, this answer to "What are the new features in C++17?", which references the changes to std::hash
that you mention.
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
add a comment |
This can actually be kind of hard.
Individual revisions
First, there's the list of closed core language issues (and the equivalent page for library issues), which gives you a paper reference and some date information.
There's the working group's mailings.
There's the standard's source whose history can be examined using Git tools and their friends. The commit log in theory should be useful — though I recommend noting down the name (e.g. a word like "N3690") of the Final Draft for each standard so that you can recognise it in the tag list.
This is your best bet if you're literally looking for the specific revision where a change was introduced.
Between standards
When trying to determine in which standard the change was introduced, personally I tend to just open up individual standard documents and do my own visual bisection. This works well if you know where the feature's wording is located in the standard, and if the wording is mostly compartmentalised in one place, though it can still be time consuming.
For motivations you'll be looking for the original proposal paper. If you manage to find the draft revision where the change was made, hopefully someone will have cross-referenced the name/ID of the proposal.
I also find that Google gives some good results when searching for this if you already have a vague idea of its contents: e.g. "C++ if declaration definition while for consistent proposal".
And, if you don't mind non-authoritative sources (which should nonetheless be reliable), there are usually Stack Overflow answers that track changes between C++ standards, with links to the relevant papers. For example, this answer to "What are the new features in C++17?", which references the changes to std::hash
that you mention.
This can actually be kind of hard.
Individual revisions
First, there's the list of closed core language issues (and the equivalent page for library issues), which gives you a paper reference and some date information.
There's the working group's mailings.
There's the standard's source whose history can be examined using Git tools and their friends. The commit log in theory should be useful — though I recommend noting down the name (e.g. a word like "N3690") of the Final Draft for each standard so that you can recognise it in the tag list.
This is your best bet if you're literally looking for the specific revision where a change was introduced.
Between standards
When trying to determine in which standard the change was introduced, personally I tend to just open up individual standard documents and do my own visual bisection. This works well if you know where the feature's wording is located in the standard, and if the wording is mostly compartmentalised in one place, though it can still be time consuming.
For motivations you'll be looking for the original proposal paper. If you manage to find the draft revision where the change was made, hopefully someone will have cross-referenced the name/ID of the proposal.
I also find that Google gives some good results when searching for this if you already have a vague idea of its contents: e.g. "C++ if declaration definition while for consistent proposal".
And, if you don't mind non-authoritative sources (which should nonetheless be reliable), there are usually Stack Overflow answers that track changes between C++ standards, with links to the relevant papers. For example, this answer to "What are the new features in C++17?", which references the changes to std::hash
that you mention.
edited Jan 12 at 18:18
answered Jan 12 at 16:53
Lightness Races in OrbitLightness Races in Orbit
288k51469798
288k51469798
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
add a comment |
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
Thank you for your answer. It seems that I found what I was looking for: open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:24
add a comment |
Another source you can use is cppreference. They do a very good job in showing what is different in the different version of the standard. For instance, the std::hash
page lists that argument_type
and result_type
are deprecated in C++17 and removed in C++20. With that information you at least know that the remove happened in a version of the standard between C++17 and C++20, which is lot less versions to look through.
Additionally, in at least some sections, if there was a defect report there will also be a link to that defect report on the page.
You'll still have to do some hunting, but hopefully this will narrow it down for you.
add a comment |
Another source you can use is cppreference. They do a very good job in showing what is different in the different version of the standard. For instance, the std::hash
page lists that argument_type
and result_type
are deprecated in C++17 and removed in C++20. With that information you at least know that the remove happened in a version of the standard between C++17 and C++20, which is lot less versions to look through.
Additionally, in at least some sections, if there was a defect report there will also be a link to that defect report on the page.
You'll still have to do some hunting, but hopefully this will narrow it down for you.
add a comment |
Another source you can use is cppreference. They do a very good job in showing what is different in the different version of the standard. For instance, the std::hash
page lists that argument_type
and result_type
are deprecated in C++17 and removed in C++20. With that information you at least know that the remove happened in a version of the standard between C++17 and C++20, which is lot less versions to look through.
Additionally, in at least some sections, if there was a defect report there will also be a link to that defect report on the page.
You'll still have to do some hunting, but hopefully this will narrow it down for you.
Another source you can use is cppreference. They do a very good job in showing what is different in the different version of the standard. For instance, the std::hash
page lists that argument_type
and result_type
are deprecated in C++17 and removed in C++20. With that information you at least know that the remove happened in a version of the standard between C++17 and C++20, which is lot less versions to look through.
Additionally, in at least some sections, if there was a defect report there will also be a link to that defect report on the page.
You'll still have to do some hunting, but hopefully this will narrow it down for you.
edited Jan 12 at 17:43
answered Jan 12 at 17:35
NathanOliverNathanOliver
90.2k15126190
90.2k15126190
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54161761%2fhow-do-i-find-the-revision-of-c-standard-where-a-specific-requirement-was-rem%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
8
The C++ draft git repository?
– Some programmer dude
Jan 12 at 16:51
1
Are you asking about which version of the standard did this or which draft revision? Because I don't know why the latter would matter to you.
– Nicol Bolas
Jan 12 at 18:11
@NicolBolas, draft revision, because I hoped that it will help me to find the original proposal that explains, why the change was necessary. Let's say that I use the implementation of C++ standard library that does not fulfill certain standard requirements, e.g. hash does not act like unary_function. What consequences it may have? Is it just missing two unnecesary typedef's? How they were intended to be used? Since they are already deprecated, I tend to think that there were some unexpected problems and the proposal could explain them.
– user7122617
Jan 13 at 15:19
1
@user7122617: "because I hoped that it will help me to find the original proposal that explains, why the change was necessary." Finding the specific draft that included a change won't help you find the proposal/defect resolution that suggested it. The drafts won't say why a proposal was accepted or even what the proposal was. If you want to find the original proposal, the best way to do that is to search the WG21 papers site with a Google site-specific search.
– Nicol Bolas
Jan 13 at 16:07
@NicolBolas, it seems that you are right. I've just found open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0090r0.htm
– user7122617
Jan 13 at 16:20