Поделиться через


Ошибка компилятора C3615

Функция constexpr "function" не может привести к константном выражении

Не удалось оценить функцию как constexpr во время компиляции. Чтобы быть constexpr, функция может вызывать только другие constexpr функции.

Пример

Visual Studio 2017 правильно вызывает ошибку, если левый операнд условной оценки операции недопустим в контексте constexpr . Следующий код компилируется в Visual Studio 2015, но не в 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
}

Чтобы устранить эту проблему, объявите array::size() функцию как constexpr или удалите constexpr квалификатор из f.