Freigeben über


Compilerfehler C3615

die constexpr-Funktion „function“ muss einen konstanten Ausdruck ergeben

Die Funktion konnte zur Kompilierungszeit nicht ausgewertet constexpr werden. constexprEine Funktion kann nur andere constexpr Funktionen aufrufen.

Beispiel

Visual Studio 2017 löst einen Fehler aus, wenn der linke Operand eines bedingt ausgewerteten Vorgangs in einem constexpr Kontext ungültig ist. Der folgende Code kompiliert in Visual Studio 2015, jedoch nicht in 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
}

Um dieses Problem zu beheben, deklarieren Sie die array::size() Funktion entweder als constexpr Qualifizierer, oder entfernen Sie den constexpr Qualifizierer aus f.