<!doctype html>
<html lang="en">
  <head>
    <title>
              SD-9: Library Evolution Policies : 
            Standard C++
    </title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="/favicon.ico" rel="shortcut icon">
    <link rel="apple-touch-icon" href="apple-touch-icon-57.png">
    <link rel="apple-touch-icon" sizes="72x72" href="apple-touch-icon-72.png">
    <link rel="apple-touch-icon" sizes="114x114" href="apple-touch-icon-114.png">
    <link rel="apple-touch-icon" sizes="144x144" href="apple-touch-icon-144.png">
    <link href="https://fonts.googleapis.com/css?family=Crimson+Text|Roboto|Roboto+Condensed:400,700&display=swap" rel="stylesheet">
    <link href="/assets/css/app.css?v012" rel="stylesheet" media="all" type="text/css">
    <link href="/assets/css/prettify.css" rel="stylesheet" media="all" type="text/css">

    <script type="text/javascript" src="/assets/js/prettify.min.js"></script>    
  </head>
  
  <body class="hide-sidebar">
    <div id="root">
    
      <div id="crown">
        <a id="sidebar-toggle" href="#sidebar">Show sidebar &raquo;</a>
        <ul class="user">
                          <li><a href="https://isocpp.org/member/login">Sign In / Suggest an Article</a></li>
          <li><a href="https://isocpp.org/member/register">Register</a></li>
                </ul>
      </div>

      <header id="top" role="banner">
        <div class="container">
          <h1>
            <a href="https://isocpp.org/"><img src="/assets/images/cpp_logo.png" alt="Standard C++"></a>
          </h1>
          <nav role="navigation">
            <ul id="nav-sub">
<li class="first"><a href="https://isocpp.org/get-started">Get Started!</a></li>
<li><a href="https://isocpp.org/tour">Tour</a></li>
<li><a href="https://isocpp.org/guidelines">Core Guidelines</a></li>
<li><a href="https://isocpp.org/faq">Super-FAQ</a></li>
<li class="parent-here"><a href="https://isocpp.org/std">Standardization</a></li>
<li class="last"><a href="https://isocpp.org/about">About</a></li>
</ul>
          </nav>
          <form action="/search/google">
            <input type="text" name="q" id="q" maxlength="100" value="" class="textbox">
            <input type="submit" value="Search" class="button">
          </form>
          <!--
          <form method="post" action="https://isocpp.org/"  >
<div class='hiddenFields'>
<input type="hidden" name="ACT" value="6" />
<input type="hidden" name="XID" value="048dbe9d98cbcbecea2ae122f907e8654eca6db0" />
<input type="hidden" name="RES" value="" />
<input type="hidden" name="meta" value="YTo5OntzOjY6InN0YXR1cyI7czowOiIiO3M6NzoiY2hhbm5lbCI7czoxOToiYmxvZ3xwYWdlc3xmYXF8d2lraSI7czo4OiJjYXRlZ29yeSI7czowOiIiO3M6OToic2VhcmNoX2luIjtzOjEwOiJldmVyeXdoZXJlIjtzOjU6IndoZXJlIjtzOjM6ImFsbCI7czoxMjoic2hvd19leHBpcmVkIjtzOjA6IiI7czoxOToic2hvd19mdXR1cmVfZW50cmllcyI7YjowO3M6MTE6InJlc3VsdF9wYWdlIjtzOjE0OiJzZWFyY2gvcmVzdWx0cyI7czoxNToibm9fcmVzdWx0c19wYWdlIjtzOjE3OiJzZWFyY2gvbm9fcmVzdWx0cyI7fTNkZmE5MTM0YzRkODdjNWE2MDc5Y2YxZjA5OGYxOTRh" />
<input type="hidden" name="site_id" value="1" />
</div>


            <input type="text" name="keywords" id="keywords" maxlength="100" value="M50o93H7pQ09L8X1t49cHY01Z5j4TT91fGfr" class="textbox">
            <input type="submit" value="Search" class="button">
          </form>
          -->
        </div>
      </header>

      <div id="content" class="hide-sidebar" role="main">
        <div class="container">


<div id="sidebar">
        <section>
              <header>Features</header>
            <div class="sidebar-section-content prettify">
        <p>
	<a href="https://isocpp.org/std/status">Current ISO C++ status</a></p>
<p>
	&nbsp;</p>
<p>
	<a href="https://isocpp.org/std/standing-documents">ISO C++ standing documents</a></p>
<p>
	&nbsp;</p>
<p>
	<a href="https://isocpp.org/std/meetings-and-participation/upcoming-meetings">Upcoming ISO C++ meetings</a></p>
<p>
	&nbsp;</p>
<p>
	<a href="https://isocpp.org/wiki/faq/conferences-worldwide">Upcoming C++ conferences</a></p>
<p>
	&nbsp;</p>
<p>
	<a href="http://en.cppreference.com/w/cpp/compiler_support">Compiler conformance status</a></p>
      </div>
    </section>
  
  
  <nav>
    <section>
      <header>
        <a href="https://isocpp.org/std/">Standardization</a>
      </header>
      <ul id="nav-sub">
<li class="first"><a href="https://isocpp.org/std/the-standard">The Standard</a></li>
<li><a href="https://isocpp.org/std/the-committee">The Committee</a></li>
<li><a href="https://isocpp.org/std/meetings-and-participation">Meetings and Participation</a></li>
<li><a href="https://isocpp.org/std/status">Current Status</a></li>
<li><a href="https://isocpp.org/std/submit-issue">How To Submit a New Issue / Defect Report</a></li>
<li><a href="https://isocpp.org/std/submit-a-proposal">How To Submit a Proposal</a></li>
<li><a href="https://isocpp.org/std/the-life-of-an-iso-proposal">The life of an ISO proposal: From "cool idea" to "international standard"</a></li>
<li><a href="https://isocpp.org/std/library-design-guidelines">Library Design Guidelines</a></li>
<li class="parent-here"><a href="https://isocpp.org/std/standing-documents">Standing Documents</a>
<ul>
<li class="first"><a href="https://isocpp.org/std/standing-documents/sd-3-study-group-organizational-information">SD-3: Study Group Organizational Information</a></li>
<li><a href="https://isocpp.org/std/standing-documents/sd-4-wg21-practices-and-procedures">SD-4: WG21 Practices and Procedures</a></li>
<li><a href="https://isocpp.org/std/standing-documents/sd-5-meeting-information">SD-5: Meeting Information</a></li>
<li><a href="https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-FeatureTest: Feature-Test Macros and Policies</a></li>
<li><a href="https://isocpp.org/std/standing-documents/sd-7-mailing-procedures-and-how-to-write-papers">SD-7: Mailing Procedures and How to Write Papers</a></li>
<li><a href="https://isocpp.org/std/standing-documents/sd-8-standard-library-compatibility">SD-8: Standard Library Compatibility</a></li>
<li class="here"><a href="https://isocpp.org/std/standing-documents/sd-9-library-evolution-policies">SD-9: Library Evolution Policies</a></li>
<li class="last"><a href="https://isocpp.org/std/standing-documents/sd-10-language-evolution-principles">SD-10: Language Evolution (EWG) Principles</a></li>
</ul>
</li>
<li><a href="https://isocpp.org/std/iso-iec-jtc1-procedures">ISO/IEC JTC1 Procedures</a></li>
<li class="last"><a href="https://isocpp.org/std/forums">Forums</a></li>
</ul>
    </section>
  </nav>
    
      <section>
              <header>Upcoming Events</header>
            <div class="sidebar-section-content">
        <p>
	<strong><a href="http://italiancpp.github.io/cppday25">C++ Day 2025</a></strong></p>
<p>
	October 25, Pavia, Italy</p>
<p>
	&nbsp;</p>
<p>
	<a href="https://meetingcpp.com/2025/"><strong>Meeting C++ 2025</strong></a></p>
<p>
	November 6-8, Berlin, Germany</p>
<p>
	&nbsp;</p>
<p>
	<a href="https://isocpp.org/files/papers/N4977.pdf"><strong>ISO C++ standards meeting</strong></a></p>
<p>
	November 3-8, Kona, HI, USA</p>
      </div>
    </section>
  
</div>

<div id="mainbar">

  <header>
    <div class="breadcrumbs">
      <a href="https://isocpp.org">Home</a> &raquo; <a href="https://isocpp.org/std/">Standardization</a> &raquo; <a href="https://isocpp.org/std/standing-documents/">Standing Documents</a> &raquo; <span class="last">SD-9: Library Evolution Policies</span>
    </div>
    
      

      <h2>SD-9: Library Evolution Policies</h2>
    </header>

        
    <article class="prettify">
      
        <table border="1">
	<tbody>
		<tr>
			<th>
				Doc. No.:</th>
			<td>
				SD-9</td>
		</tr>
		<tr>
			<th>
				Date:</th>
			<td>
				2024-05-14</td>
		</tr>
		<tr>
			<th>
				Reply to:</th>
			<td>
				Inbal Levi</td>
		</tr>
	</tbody>
</table>
<h2>
	What are Standard Library Policies</h2>
<p>
	A "policy" is any technical rule or technical guideline, which should be followed by authors of proposals of utilities for the C++ standard library.</p>
<p>
	Policies are set by Library Evolution Work Group (under JCT1/SC22/WG21), using the process described in <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2267r1.html#ref-P2267R1">P2267R1</a>.</p>
<p>
	The following document describes the existing C++ Standard Library Policies. Please read it carefully before writing a proposal to LEWG.</p>
<p>
	As a rule, your paper should apply all the policies. The section "Excluding a proposal from applying a policy" describes the process that should be followed for any policy to be bypassed.</p>
<h2>
	Motivation for Standard Library Policies</h2>
<h3>
	Pros for setting policies</h3>
<p>
	1.&nbsp; Policies create uniformity in users&#39; expectations from the behaviour of different parts of the standard library</p>
<p>
	2.&nbsp; Policies save time for both authors and the committee</p>
<p>
	3.&nbsp; Policies need to be created from a shared knowledge base</p>
<p>
	4.&nbsp; Policies make the standardization process friendly for newcomers</p>
<h3>
	Cons for setting policies</h3>
<p>
	1.&nbsp; Policies may "push aside" domains which are in a minority representation in the committee</p>
<p>
	2.&nbsp; Policies may enforce wrong technical solution for some utilities proposed for the standard library</p>
<h2>
	Excluding a proposal from applying a policy</h2>
<p>
	To address the concerns brought up above, a paper can avoid applying a policy, as long as it contains detailed technical rationale and justifications.</p>
<p>
	Prior art in the field discussed can also help with providing reasoning, but it&#39;s the authors&#39; responsibility to explain why the policy can&#39;t be successfully applied to the utility proposed into the standard library.</p>
<h2>
	List of Standard Library Policies</h2>
<p>
	1.&nbsp;<strong>Policy</strong>: Library wording should not use [[nodiscard]] (<a href="https://wg21.link/P3201R1">P3201R1</a>:&nbsp;LEWG [[nodiscard]] policy (Jonathan Wakely, David Sankel, Darius Nea&#539;u))</p>
<p>
	<strong>Rationale</strong>:&nbsp;Warnings are non-normative so [[nodiscard]] placement has a spurious impact. Furthermore, implementors are better qualified to identify when and where to emit warnings for their implementations.</p>
<p>
	<strong>References</strong>:&nbsp;</p>
<ul>
	<li>
		<a href="https://wg21.link/P3162R0">P3162R0</a>: LEWG [[nodiscard]] policy (Darius Nea&#539;u, David Sankel)</li>
	<li>
		<a href="https://wg21.link/P3122R1">P3122R1</a>: Using [[nodiscard]] should be Recommended Practice (Jonathan Wakely)</li>
</ul>
      
      
            
          </article>
    

    
  <footer>
    
    
    <div class="back-to-top">
      <a href="#">Back to Top</a>
    </div>
  </footer>

</div>

        </div>
        
        <div id="root-footer"></div>
      </div>
    </div>

    <footer id="bottom" role="contentinfo">
      <div class="container">
        &copy; <a href="/home/terms-of-use">Copyright</a> 2025 Standard C++ Foundation. 
        All rights reserved.
        <ul id="nav-sub">
<li class="first"><a href="https://isocpp.org/home/terms-of-use">Terms of Use</a></li>
<li class="last"><a href="https://isocpp.org/home/privacy-policy">Privacy Policy</a></li>
</ul>
        <br>Hosted by <a href="https://m.do.co/c/32f291566cf7" target="_blank">DigitalOcean</a>
        , supported by <a href="https://princexml.com/" target="_blank">Prince XML</a>
      </div>
    </footer>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="https://isocpp.org/javascript/jquery.min"><\/script>')</script>
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
    <script>window.jQuery.ui || document.write('<script src="https://isocpp.org/javascript/jquery-ui.min"><\/script>')</script>
    
    <script type="text/javascript" charset="utf-8" src="https://isocpp.org/?ACT=comment_editor"></script>
    <script type="text/javascript">
	        					$(document).ready(function() {
									$("*[id^=likee_]").click(function(){
										var ids = $(this).attr("id").split("_");
										if (ids[1]=="c"){
											id=ids[2];
											c="c_";
											isCom="true";
										} else {
											id=ids[1];
											c="";
											isCom="false";
										}
										
										$.ajax({
	   										type: "POST",
	   										url: "/std/standing-documents/sd-9-library-evolution-policies",
	   										data: "likee=true&entry_id="+id+"&isCom="+isCom,
	   										success: function(msg){
	     										//alert( "Data Saved: " + msg );
	   										}
	 									});
	 									
	 									$(this).replaceWith("<strong>"+$(this).html()+"</strong>");
	 									$("#dislikee_"+c+id).replaceWith("<span>"+$("#dislikee_"+c+id).html()+"</span>");
	 									$("#scoreeCount_"+c+id).html(parseInt($("#scoreeCount_"+c+id).html())+1);
	 									$("#likeeCount_"+c+id).html(parseInt($("#likeeCount_"+c+id).html())+1);
	 									$("#likeeReplace_"+c+id).replaceWith("");
	 									$("#likeeShow_"+c+id).replaceWith($("#likeeShow_"+c+id).html());
									});
									
									$("*[id^=dislikee_]").click(function(){
										var ids = $(this).attr("id").split("_");
										if (ids[1]=="c"){
											id=ids[2];
											c="c_";
											isCom="true";
										} else {
											id=ids[1];
											c="";
											isCom="false";
										}
										$.ajax({
	   										type: "POST",
	   										url: "/std/standing-documents/sd-9-library-evolution-policies",
	   										data: "dislikee=true&entry_id="+id+"&isCom="+isCom,
	   										success: function(msg){
	     										//alert( "Data Saved: " + msg );
	   										}
	 									});
	 									
	 									$(this).replaceWith("<strong>"+$(this).html()+"</strong>");
	 									$("#likee_"+c+id).replaceWith("<span>"+$("#likee_"+c+id).html()+"</span>");
	 									$("#scoreeCount_"+c+id).html(parseInt($("#scoreeCount_"+c+id).html())-1);
	 									$("#dislikeeCount_"+c+id).html(parseInt($("#dislikeeCount_"+c+id).html())+1);
	 									$("#likeeReplace_"+c+id).replaceWith("");
	 									$("#likeeShow_"+c+id).replaceWith($("#likeeShow_"+c+id).html());
									});
								
								});	
	        			  </script>
    
    <script type="text/javascript" src="/js/isocpp.lib.min.js"></script>
    <script type="text/javascript" src="/js/global.js"></script>

        
    <script type="text/javascript">
      $("#top nav a").each(function() {
        var aSeg1 = $(this).attr("href").replace("http://", "").replace("https://", "").split("/")[1];
        if (aSeg1 == "std") {$(this).parent().addClass("here");}
      });
    </script>

  </body>
</html>
