This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
Section: 17.4.1 [cstdint.syn], 16.4.2.3 [headers] Status: New Submitter: Dawid Pilarski Opened: 2020-01-14 Last modified: 2020-01-25
Priority: 3
View all other issues in [cstdint.syn].
View all issues with New status.
Discussion:
This issue has been submitted, because the editorial change requests c++-draft-issue 3521 and c++-draft-pull request 3528 has been rejected as not being editorial changes:
Currently given wording of 17.4.1 [cstdint.syn]p2:
The header defines all types and macros the same as the C standard library header <stdint.h>.
might be understood as intended: typedefs inside stdint.h and inside cstdint in namespace std:: refer to the same types, but another interpretation could be, that it's understood as:
Definitions in both files are done the same way (cstdint provides typedefs not in namespace std, because it would be a different definition than one in stdint.h). Also 16.4.2.3 [headers]p5 is non sufficiently clear:[…] the contents of each header cname is the same as that of the corresponding header name.h […]
As it doesn't say what does "same content" mean. For example is an implementation allowed to do following:
// __impl.h typedef int __my_int; namespace std { typedef long __my_int; } // cname header #include "__impl.h" namespace std { typedef __my_int uint32_t; } // name.h header #include "__impl.h" typedef __my_int uint32_t;
?
In this case typedef from namespace std and from global namespace refer to different types? Proposed change: Apply wording, that will unambiguously make typedefs from namespace std refer to the same types as typedefs from global namespace for all headers name.h and their corresponding headers cname.[2020-01-25 Issue Prioritization]
Priority to 3 after reflector discussion.
Proposed resolution: