Ошибка компилятора 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
.