How to find the revision of C++ standard, where a specific requirement was removed or changed?












9















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.



So, the question is how can I find the revision, where this requirement was removed and motivation for it?










share|improve this question




















  • 3





    The C++ draft git repository?

    – Some programmer dude
    1 hour ago











  • 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
    14 mins ago
















9















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.



So, the question is how can I find the revision, where this requirement was removed and motivation for it?










share|improve this question




















  • 3





    The C++ draft git repository?

    – Some programmer dude
    1 hour ago











  • 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
    14 mins ago














9












9








9


4






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.



So, the question is how can I find the revision, where this requirement was removed and motivation for it?










share|improve this question
















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.



So, the question is how can I find the revision, where this requirement was removed and motivation for it?







c++ language-lawyer std






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 43 mins ago









Ivan

3,53092344




3,53092344










asked 1 hour ago









user7122617user7122617

973




973








  • 3





    The C++ draft git repository?

    – Some programmer dude
    1 hour ago











  • 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
    14 mins ago














  • 3





    The C++ draft git repository?

    – Some programmer dude
    1 hour ago











  • 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
    14 mins ago








3




3





The C++ draft git repository?

– Some programmer dude
1 hour ago





The C++ draft git repository?

– Some programmer dude
1 hour ago













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
14 mins ago





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
14 mins ago












2 Answers
2






active

oldest

votes


















7














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.






share|improve this answer


























  • "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

    – Nicol Bolas
    12 mins ago











  • @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

    – Lightness Races in Orbit
    9 mins ago











  • @NicolBolas I did a thing with the edit button

    – Lightness Races in Orbit
    6 mins ago



















5














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.






share|improve this answer

























    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
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54161761%2fhow-to-find-the-revision-of-c-standard-where-a-specific-requirement-was-remov%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









    7














    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.






    share|improve this answer


























    • "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

      – Nicol Bolas
      12 mins ago











    • @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

      – Lightness Races in Orbit
      9 mins ago











    • @NicolBolas I did a thing with the edit button

      – Lightness Races in Orbit
      6 mins ago
















    7














    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.






    share|improve this answer


























    • "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

      – Nicol Bolas
      12 mins ago











    • @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

      – Lightness Races in Orbit
      9 mins ago











    • @NicolBolas I did a thing with the edit button

      – Lightness Races in Orbit
      6 mins ago














    7












    7








    7







    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.






    share|improve this answer















    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.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 6 mins ago

























    answered 1 hour ago









    Lightness Races in OrbitLightness Races in Orbit

    285k51461785




    285k51461785













    • "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

      – Nicol Bolas
      12 mins ago











    • @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

      – Lightness Races in Orbit
      9 mins ago











    • @NicolBolas I did a thing with the edit button

      – Lightness Races in Orbit
      6 mins ago



















    • "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

      – Nicol Bolas
      12 mins ago











    • @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

      – Lightness Races in Orbit
      9 mins ago











    • @NicolBolas I did a thing with the edit button

      – Lightness Races in Orbit
      6 mins ago

















    "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

    – Nicol Bolas
    12 mins ago





    "Happy to be shown where one is." There's one on this very website for C++17. It's not official, but it's probably the best you're going to get.

    – Nicol Bolas
    12 mins ago













    @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

    – Lightness Races in Orbit
    9 mins ago





    @NicolBolas Not bad, and does list the OP's referenced change (albeit unintegrated)

    – Lightness Races in Orbit
    9 mins ago













    @NicolBolas I did a thing with the edit button

    – Lightness Races in Orbit
    6 mins ago





    @NicolBolas I did a thing with the edit button

    – Lightness Races in Orbit
    6 mins ago













    5














    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.






    share|improve this answer






























      5














      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.






      share|improve this answer




























        5












        5








        5







        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.






        share|improve this answer















        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.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 41 mins ago

























        answered 50 mins ago









        NathanOliverNathanOliver

        88.3k15120184




        88.3k15120184






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54161761%2fhow-to-find-the-revision-of-c-standard-where-a-specific-requirement-was-remov%23new-answer', 'question_page');
            }
            );

            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







            Popular posts from this blog

            What other Star Trek series did the main TNG cast show up in?

            Berlina muro

            Berlina aerponto