微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MSVC 的标准库没有为 std::string、std::shared_ptr 等定义飞船操作符?

如何解决MSVC 的标准库没有为 std::string、std::shared_ptr 等定义飞船操作符?

我正在尝试使我的程序多平台,最初是为 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 下工作。我是否在这里遗漏了某些点,或者它没有得到完全支持

解决方法

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

它部分支持P0768R1库支持运算符 <compare>)和完全支持P1185R2运算符)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。