繁体   English   中英

C2057:预期常量表达式

[英]C2057: expected constant expression

我无法在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必须在第一阶段进行解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM