我正在编写一个类,它要求实例化的模板类型在bitshift操作下表现得像无符号类型。这是如此,因为位移下的负数与位移操作下的正数表现不同。因此,我的想法是简单地将我获得的任何类型作为模板参数转换为typedef中的未签名版本,并在内部仅使用typedefed版本。如果模板参数类型不支持这个,那么......它根本就没有,并且会出现编译时错误。我试过的看起来像这样:
template <class X>
class C
{
using Y = unsigned X;
};
不正确:error: type-id cannot have a name
这一切都可能吗?如果是这样的话?
答案 0 :(得分:2)
您正在寻找std::make_unsigned
:
template <class X>
class C
{
using Y = std::make_unsigned_t<X>;
};