![](/img/trans.png)
[英]Invalid conversion from std::size_t* to long unsigned int*
[英]how to std::variant<unsigned long, size_t, unsigned int>
我遇到了一个可移植性问题,这是因为size_t
因平台而异(有时相当于unsigned int
,有时相当于unsigned long
)
我想写的是:
"if constexpr" / "enable_if" / "whatever" (size_t == unsigned long)
using V = std::variant<unsigned int, size_t>;
else
using V = std::variant<unsigned long, size_t>;
什么是不那么丑陋的写法?
编译器资源管理器片段的链接:
https://godbolt.org/z/AZVFEz :使用 gcc 9.2 64 位,其中size_t
<-> unsigned long
https://godbolt.org/z/wWeCbW :使用 msvc 19.22 32 位,其中size_t
<-> unsigned int
由于您需要条件类型别名,您可以使用std::conditional
using V = std::conditional_t<std::is_same_v<std::size_t, unsigned long>,
std::variant<unsigned int, size_t>,
std::variant<unsigned long, size_t>
>;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.