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.