我遇到了可移植性问题,这是由于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
答案 0 :(得分:2)
由于需要条件类型别名,因此可以使用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>
>;