2

我正在尝试使我的程序多平台,最初是为 Linux 编写的。MSVC(我使用的是 19.28)被告知从 19.20 版(https://en.cppreference.com/w/cpp/compiler_support/20)开始支持宇宙飞船操作员,但它似乎没有为 std 定义这个操作员::string 或 std::shared_ptr (可能适用于许多其他生物)。

我真正想做的是:


// int x(1), y(2); // ok!
// std::string x("1"), y("2"); // nope
std::shared_ptr<int> x(new int), y(new int); // nope
auto r = x <=> y; // error C2676 for string and shared_ptr

现场示例: https ://godbolt.org/z/Eo49hh

它在 GCC 10.2 下工作。我在这里遗漏了一些观点,还是没有完全支持?

4

1 回答 1

6

MSVC 支持operator<=>,但这并不意味着它们已经为所有库实现。从您到 cppreference 的链接,在C++20 库功能部分下,它实际上表明 MSVC 没有P1614R2将 <=> 添加到标准库

它部分支持P0768R1库支持 operator<=><compare>)和完全支持P1185R2操作员

于 2021-02-09T18:45:12.437 回答