这是我的枚举声明:
enum connection_primary_identifier_e : uint64_t
{
INVALID_IDENTIFIER = std::numeric_limits<std::underlying_type<connection_primary_identifier_e>::type>::max(),
}
(如果我直接使用uint64_t
作为类型,同样如果我使用-1
或-1ULL
)
当我尝试编译文件时,我收到以下错误/警告:
error: integer constant is so large that it is unsigned [-Werror]
error: narrowing conversion of ‘18446744073709551615I128’ from ‘__int128’ to ‘unsigned int’ inside { } [-Werror=narrowing]
error: large integer implicitly truncated to unsigned type [-Werror=overflow]
cc1plus: all warnings being treated as errors
真的很奇怪的是,错误实际上是在另一个文件(使用枚举)上为不存在的行(行号在文件的最后一行之后是3)产生的,我确定它不是&#39; ta缺少括号或类似的东西。
更新:
使用uint32_t
不会产生错误。
使用g ++(GCC)4.8.3
答案 0 :(得分:1)
可能因为std::underlying_type
最初未指定且不需要完整类型。这无意中允许使用connection_primary_identifier_e
但仍然不完整的代码。
从C ++ 17开始,您的代码绝对是非法的。