由于运算符<=>
是在 C++20 中引入的,因此我们首先需要<compare>
在使用之前包含(内置和默认)。
但是,我在每个实现(可能使用编译std::weak_ordering
器)中std::partial_ordering
看到了每个排序(用于非类型模板参数。std::strong_ordering
operator<=>
我已经在 3 个主要的库实现中测试了这段代码:libstdc++
、、libc++ (or libcxx)
和STL
:
#include <compare>
template <auto>
struct nttp_test {};
constexpr void swallow(const auto&...) {}
int main() {
swallow(
nttp_test<(1 == 1)>{},
nttp_test<(1 <=> 1)>{}
);
}
在哪里:
STL
从MSVC
过去。(https://godbolt.org/z/8r88sf4qv)libstdc++
从GCC
失败。(https://godbolt.org/z/Mbdzf48Pv)libc++
从Clang
也失败了。(https://godbolt.org/z/9PxdTra3r)
据透露,只做STL
数据成员public
,其余的都是private
(我的意思是只有数据成员)
我很满意,STL
因为它使返回值在 中可用NTTP
,但作为交换,它将数据成员公开给公众。
哪个库实现是正确的?还是取决于每个实现?