将`std::numeric_limits`专门化为`std::byte`是否安全?

问题描述 投票:0回答:1

当我期待

std::numeric_limits<std::byte>::digits
时,我很惊讶
0
返回了
8
。我相信这是由于缺乏
std::byte
的专业化,因此在这种情况下默认返回
0
的默认实现。

由于标准似乎没有做到这一点,因此将

std::numeric_limits
专门用于
std::byte
我自己的代码是否安全?

c++ c++17
1个回答
0
投票

这不安全,事实上是不允许的。 [命名空间.std]/2 状态

除非明确禁止,否则程序可以将任何标准库类模板的模板专业化添加到命名空间 std ,前提是

  • 添加的声明取决于至少一种程序定义的类型,并且
  • 专业化满足原始模板的标准库要求。155

这是第一个不允许这样做的要点。

std::byte
是库类型,而不是程序定义的类型。

© www.soinside.com 2019 - 2024. All rights reserved.