可能C++工作草案的措辞有缺陷(整数转换排名规则)

2022-05-17 00:00:00 language-lawyer c++ c++20 wchar-t

我在working draft of standard C++中发现了一个可能的矛盾。首先我介绍事实,最后是我的问题。

建立整数折算等级时,[conv.rank]/1.1表示

没有两个带符号的整数类型[...]应具有相同的整数 转换等级,即使它们具有相同的表示形式。

[basic.fundamental]/8表示:

类型wchar_t是具有实现定义的不同类型 带符号或无符号整数类型作为其基础类型。

最后[conv.rank]/1.8:

char8_tchar16_tchar32_twchar_t的级别应等于 它们的基础类型的排名([Basic.Basic])。

如果wchar_t被实现为有符号整数类型,它将与其基础类型具有相同的排名,后者是某个其他整数类型的不同类型。

因此,我们有两个不同的带符号整数类型,具有相同的秩次,这与[Conv.rank]/1.1相矛盾。

这是一个实际的矛盾,还是我误解了C++中两个简单可复制的类型是不同的类型?


解决方案

我们有两种不同的带符号整数类型

我在标准中看不到wchar_t是带符号的整数类型。或无符号整数类型。我明白了it says that it is an "integer type":

类型bool、char、wchar_-t、char8_-t、char16_-t、char32_-t以及带符号和无符号整数类型统称为整型。整型的同义词是整型。

但";带符号整数类型&的定义不包括wchar_t。也就是说,该标准明确允许存在既不是有符号整数类型也不是无符号整数类型的整数类型。

并且[Conver.rank]中的语句不适用于此类类型。

相关文章