簡體   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