编辑说明:最初的问题是非法的,现在它说的是unspecified。
感谢最近 Jason Turner 视频的视频评论部分,我了解到这std::complex<int>
是未指定的。
但是所有(AFAIK)实现似乎都可以愉快地编译
std::complex<int>
但是有些函数,比如std::abs()
for 被破坏了std::complex<int>
,所以在那些主流实现中它实际上是不可用的。
我想知道为什么从未实施过对“坏”类型的检测是否有某种原因。我知道 std lib 实现需要与旧标准一起使用,因此它们不能只是将std::floating_point
概念卡在任何地方,但即使在 C++20 之前,我们也有办法约束模板。
换句话说:这只是“会很好,但我们没有时间”的问题,还是有一些兼容性原因来保持这个编译。我能想到的唯一一件事是,有些人正在使用 std::complex 和 std lib “制造商”不想明显破坏他们已经损坏的代码。