Visual Studio 2013模板别名

3
以下是代码:
template <class Integral>
using enable_if_integral_t = typename std::enable_if<std::is_integral<Integral>::value>::type;

template <class Integral, class Enable = void>
class DigitsNumber;

template <class Integral>
class DigitsNumber<Integral, enable_if_integral_t<Integral>>{
};

在MSVC 2013中会产生错误:

错误 C3203: 'enable_if_integral_t':未特化的别名模板不能用作模板参数'Enable',需要一个真实类型

但在gcc中可以编译通过。

这段代码符合C++11标准吗?是Visual Studio的bug/未实现的功能还是不符合标准,但是gcc扩展支持它呢?

有没有办法让它在VS中工作?

谢谢。


1个回答

1

我通过dyp提供的link成功解决了这个问题:

template <class Integral>
struct MSVCWorkaround : std::enable_if<std::is_integral<Integral>::value, SomeType> {};

template <class Integral>
using enable_if_integral_t = typename MSVCWorkaround<Integral>::type;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接