c++ - C2057 : expected constant expression

标签 c++ visual-c++ gcc constants

我无法在 VS2013 上编译它,但它可以在 gcc 4.7.2 上编译。我知道 VC++ 在功能方面落后于 GCC 和 CLang,但它到底是什么功能,如果不是,这就是一个错误,不是吗?

template <int N>
struct factorial
{
    static const long value;
    static const long previous = factorial<N - 1>::value; //C2057: expected constant expression
};

template <int N>
const long factorial<N>::value = N*factorial<N - 1>::value;

template <>
struct factorial<0>
{
    static const long value = 1;
};

请不要告诉我如何解决此问题,因为这不是生产代码,我也不需要。例如我可以在类中定义值,问题就解决了,但假设我必须在类外定义它(VC2013 仍然不支持 constexpr)

最佳答案

MSVC 没有适当的两阶段模板编译。 GCC 正确地看到 factorial<N - 1>::value作为从属名称并在第二阶段解析,但 MSVC 必须在第一阶段完成。

关于c++ - C2057 : expected constant expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23054793/

相关文章:

c++ - C# 从十六进制数据中获取信息

c++ - 解决循环依赖的想法C++

c++ - 如何从另一个命名空间而不是全局命名空间定义函数和数据?

c++ - 什么时候我们不能声明函数内联(GCC 编译器)?

c++ - 为什么矢量化使用 float 比使用双数更有效?

c++ - 如何在我的应用中忽略OPENSSL_ENGINES环境变量?

c++ - 未解析的外部符号(涉及带有自定义类的模板)

C++ Do 循环在打印时保持双倍值

visual-studio - 将外部 header 添加到 Visual Studio 项目

c++ - 如何在 Visual C++ 2010 的源文件中添加注释 "by default"