Question

Je ne peux pas compiler ceci sur VS2013, mais il compile sur gcc 4.7.2.Je comprends que VC++ est en retard sur GCC et CLang en termes de fonctionnalités, mais de quelle fonctionnalité s'agit-il exactement et sinon, c'est un bug, n'est-ce pas ?

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

S'il vous plaît, ne me dites pas comment je peux trouver une solution à ce problème, car ce n'est pas un code de production et j'en ai besoin non plus.Par exemple, je peux définir une valeur dans la classe et le problème est résolu, mais supposons que je doive la définir en dehors de la classe (VC2013 ne prend toujours pas en charge constexpr)

Était-ce utile?

La solution

MSVC ne dispose pas d'une compilation de modèles en deux phases appropriée.GCC voit correctement factorial<N - 1>::value en tant que nom dépendant et se résout dans la deuxième phase, mais MSVC doit le faire dans la première phase.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top