<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 3883: &sect;[support.c.headers.other] Ambiguity in the requirements for includes</title>
<meta property="og:title" content="Issue 3883: &sect;[support.c.headers.other] Ambiguity in the requirements for includes">
<meta property="og:description" content="C++ library issue. Status: New">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue3883.html">
<meta property="og:type" content="website">
<meta property="og:image" content="http://cplusplus.github.io/LWG/images/cpp_logo.png">
<meta property="og:image:alt" content="C++ logo">
<style>
  p {text-align:justify}
  li {text-align:justify}
  pre code.backtick::before { content: "`" }
  pre code.backtick::after { content: "`" }
  blockquote.note
  {
    background-color:#E0E0E0;
    padding-left: 15px;
    padding-right: 15px;
    padding-top: 1px;
    padding-bottom: 1px;
  }
  ins {background-color:#A0FFA0}
  del {background-color:#FFA0A0}
  table.issues-index { border: 1px solid; border-collapse: collapse; }
  table.issues-index th { text-align: center; padding: 4px; border: 1px solid; }
  table.issues-index td { padding: 4px; border: 1px solid; }
  table.issues-index td:nth-child(1) { text-align: right; }
  table.issues-index td:nth-child(2) { text-align: left; }
  table.issues-index td:nth-child(3) { text-align: left; }
  table.issues-index td:nth-child(4) { text-align: left; }
  table.issues-index td:nth-child(5) { text-align: center; }
  table.issues-index td:nth-child(6) { text-align: center; }
  table.issues-index td:nth-child(7) { text-align: left; }
  table.issues-index td:nth-child(5) span.no-pr { color: red; }
  @media (prefers-color-scheme: dark) {
     html {
        color: #ddd;
        background-color: black;
     }
     ins {
        background-color: #225522
     }
     del {
        background-color: #662222
     }
     a {
        color: #6af
     }
     a:visited {
        color: #6af
     }
     blockquote.note
     {
        background-color: rgba(255, 255, 255, .10)
     }
  }
</style>
</head>
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#New">New</a> status.</em></p>
<h3 id="3883"><a href="lwg-active.html#3883">3883</a>. &sect;[support.c.headers.other] Ambiguity in the requirements for includes</h3>
<p><b>Section:</b> 17.15.7 <a href="https://wg21.link/support.c.headers.other">[support.c.headers.other]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
 <b>Submitter:</b> Alex Mills <b>Opened:</b> 2023-02-09 <b>Last modified:</b> 2023-03-22</p>
<p><b>Priority: </b>4
</p>
<p><b>View other</b> <a href="lwg-index-open.html#support.c.headers.other">active issues</a> in [support.c.headers.other].</p>
<p><b>View all other</b> <a href="lwg-index.html#support.c.headers.other">issues</a> in [support.c.headers.other].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
In 17.15.7 <a href="https://wg21.link/support.c.headers.other">[support.c.headers.other]</a>, it states that the <code>&lt;<i>name</i>.h&gt;</code> headers behave 
"as if each name placed in the standard library namespace by the corresponding header is placed within the 
global namespace scope". There are exceptions for several different definitions in the headers, but it's left 
ambiguous as to whether their inclusion in the <code>&lt;<i>name</i>.h&gt;</code> headers is required or unspecified.
<p/>
While it is clear that, for example, <code>::byte</code> is prohibited, it isn't clear whether <code>std::byte</code> 
is required to be included at all (this applies to the other listed exceptions as well). Though example 1 makes 
it appear that their inclusion requirements are meant to be left unspecified, paragraph 1 does not provide clarification. 
Adding specific wording will ensure this will not be misinterpreted in the future.
<p/>
To do this, we should append a sentence to [support.c.headers.other] p1:
</p>
<blockquote><p>
Whether the listed exceptions are included in their corresponding <code>&lt;<i>name</i>.h&gt;</code> headers under 
the standard library namespace is unspecified.
</p></blockquote>

<p><i>[2023-03-22; Reflector poll]</i></p>

<p>
Set priority to 4 after reflector poll.
"The new wording is confusingly inconsistent with the existing wording
in that paragraph. Would prefer '... Whether the listed exceptions are declared
in the namespace std by their corresponding <code>&lt;name.h&gt;</code>
headers is unspecified.'."
</p>



<p id="res-3883"><b>Proposed resolution:</b></p>
<p>
This wording is relative to <a href="https://wg21.link/N4928" title=" Working Draft, Standard for Programming Language C++">N4928</a>.
</p>

<ol>
<li><p>Modify 17.15.7 <a href="https://wg21.link/support.c.headers.other">[support.c.headers.other]</a> as indicated:</p>

<blockquote>
<p>
-1- Every C header other than <code>&lt;complex.h&gt;</code> (17.15.2 <a href="https://wg21.link/complex.h.syn">[complex.h.syn]</a>), 
<code>&lt;iso646.h&gt;</code> (17.15.3 <a href="https://wg21.link/iso646.h.syn">[iso646.h.syn]</a>), 
<code>&lt;stdalign.h&gt;</code> (17.15.4 <a href="https://wg21.link/stdalign.h.syn">[stdalign.h.syn]</a>),
<code>&lt;stdatomic.h&gt;</code> (32.5.12 <a href="https://wg21.link/stdatomic.h.syn">[stdatomic.h.syn]</a>), 
<code>&lt;stdbool.h&gt;</code> (17.15.5 <a href="https://wg21.link/stdbool.h.syn">[stdbool.h.syn]</a>), and 
<code>&lt;tgmath.h&gt;</code> (17.15.6 <a href="https://wg21.link/tgmath.h.syn">[tgmath.h.syn]</a>), each 
of which has a name of the form <code>&lt;<i>name</i>.h&gt;</code>, behaves as if each name placed in 
the standard library namespace by the corresponding <code>&lt;c<i>name</i>&gt;</code> header is placed 
within the global namespace scope, except for the functions described in 29.7.6 <a href="https://wg21.link/sf.cmath">[sf.cmath]</a>,
the <code>std::lerp</code> function overloads (29.7.4 <a href="https://wg21.link/c.math.lerp">[c.math.lerp]</a>), the declaration of 
<code>std::byte</code> (17.2.1 <a href="https://wg21.link/cstddef.syn">[cstddef.syn]</a>), and the functions and function templates described 
in 17.2.5 <a href="https://wg21.link/support.types.byteops">[support.types.byteops]</a>. 
It is unspecified whether these names are first declared or defined within namespace scope 
(6.4.6 <a href="https://wg21.link/basic.scope.namespace">[basic.scope.namespace]</a>) of the namespace <code>std</code> and are then injected into the 
global namespace scope by explicit <i>using-declarations</i> (9.10 <a href="https://wg21.link/namespace.udecl">[namespace.udecl]</a>).
<ins>Whether the listed exceptions are included in their corresponding <code>&lt;<i>name</i>.h&gt;</code> 
headers under the standard library namespace is unspecified.</ins>
</p>
</blockquote>

</li>

</ol>





</body>
</html>
