Visual Studio 2013模板别名

时间:2013-12-29 18:55:20

标签: c++ c++11 visual-studio-2013 template-aliases

以下代码

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':unspecialized别名模板不能用作模板参数'Enable'的模板参数,期望是真实类型

但是在gcc中编译得很好。

此代码是否符合C ++ 11标准,以及Visual Studio错误/未实现的功能,或者它不符合标准,而是符合gcc扩展名。

有没有办法在VS中使这个工作?

谢谢。

1 个答案:

答案 0 :(得分:1)

我能够使用link提供的dyp解决此问题:

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;