当我期待
std::numeric_limits<std::byte>::digits
时,我很惊讶0
返回了8
。我相信这是由于缺乏 std::byte
的专业化,因此在这种情况下默认返回 0
的默认实现。
由于标准似乎没有做到这一点,因此将
std::numeric_limits
专门用于 std::byte
我自己的代码是否安全?
这不安全,事实上是不允许的。 [命名空间.std]/2 状态
除非明确禁止,否则程序可以将任何标准库类模板的模板专业化添加到命名空间 std ,前提是
- 添加的声明取决于至少一种程序定义的类型,并且
- 专业化满足原始模板的标准库要求。155
这是第一个不允许这样做的要点。
std::byte
是库类型,而不是程序定义的类型。