Erreur du compilateur C3615
la fonction constexpr 'function' ne peut pas entraîner une expression constante
La fonction de fonction n’a pas pu être évaluée comme constexpr
au moment de la compilation. Pour être constexpr
, une fonction ne peut appeler que d’autres constexpr
fonctions.
Exemple
Visual Studio 2017 génère correctement une erreur lorsque l’opérande de gauche d’une opération d’évaluation conditionnelle n’est pas valide dans un constexpr
contexte. Le code suivant se compile dans Visual Studio 2015, mais pas dans Visual Studio 2017.
// C3615.cpp
// Compile with: /c
template<int N>
struct myarray
{
int size() const { return N; }
};
constexpr bool f(const myarray<1> &arr)
{
return arr.size() == 10 || arr.size() == 11; // C3615 starting in Visual Studio 2017
}
Pour résoudre ce problème, déclarez la array::size()
fonction en tant que ou constexpr
supprimez le constexpr
qualificateur de f
.