3370. §[cstdint.syn]p2 and §[headers]p5 are not sufficiently clear

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: