Compilerfehler C3615
die constexpr-Funktion „function“ muss einen konstanten Ausdruck ergeben
Die Funktion konnte zur Kompilierungszeit nicht ausgewertet constexpr
werden. constexpr
Eine 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
.