Aracılığıyla paylaş


Derleyici Hatası C3615

constexpr işlevi 'function' sabit ifadeye neden olamaz

İşlev işlevi derleme zamanında olarak constexpr değerlendirilemedi. olmak constexpriçin, bir işlev yalnızca diğer constexpr işlevleri çağırabilir.

Örnek

Visual Studio 2017, koşullu değerlendirme işleminin sol tarafındaki işlenen bir constexpr bağlamda geçerli olmadığında doğru bir hata oluşturur. Aşağıdaki kod Visual Studio 2015'te derlenmiş ancak Visual Studio 2017'de derlenmemektedir.

// 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
}

Bu sorunu düzeltmek için işlevini olarak constexpr bildirin array::size() veya niteleyiciyi constexpr 'den fkaldırın.