[英]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.