Domanda

Non riesco a compilare questo su VS2013, ma compila il GCC 4.7.2.Capisco che VC ++ è in ritardo dietro GCC e Clang in termini di funzionalità, ma quale caratteristica è esattamente e se non questo è un bug, non è?

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;
};
.

Per favore non dirmi come posso ottenere una soluzione alternativa di questo problema, perché questo non è un codice di produzione né ne ho bisogno.Ad esempio, posso definire il valore nella classe e il problema è risolto, ma supponiamo di doverlo definirlo fuori dalla classe (VC2013 ancora non supporta ConstexPR)

È stato utile?

Soluzione

MSVC non ha una corretta compilation del modello a due fasi.GCC vede correttamente factorial<N - 1>::value come nome dipendente e si risolve nella seconda fase, ma MSVC deve farlo nella prima fase.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top