,c++,enable-if"/>

首页 > 解决方案 > 如何 std::variant

问题描述

我遇到了一个可移植性问题,这是由于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

标签: c++enable-if

解决方案


由于您想要一个条件类型别名,您可以使用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>
          >;

推荐阅读