Errore del compilatore C3615
La funzione constexpr 'function' non può generare un'espressione costante
Impossibile valutare la funzione della funzione come constexpr
in fase di compilazione. Per essere constexpr
, una funzione può chiamare solo altre constexpr
funzioni.
Esempio
Visual Studio 2017 genera correttamente un errore quando l'operando sinistro di un'operazione di valutazione condizionale non è valido in un constexpr
contesto. Il codice seguente viene compilato in Visual Studio 2015 ma non 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
}
Per risolvere questo problema, dichiarare la array::size()
funzione come constexpr
o rimuovere il constexpr
qualificatore da f
.