Partage via


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.