Błąd kompilatora C3615
funkcja constexpr "function" nie może spowodować wyrażenia stałego
Nie można ocenić funkcji jako constexpr
w czasie kompilacji. Aby mieć constexpr
wartość , funkcja może wywoływać tylko inne constexpr
funkcje.
Przykład
Program Visual Studio 2017 poprawnie zgłasza błąd, gdy lewy operand operacji oceny warunkowej jest nieprawidłowy w constexpr
kontekście. Poniższy kod kompiluje się w programie Visual Studio 2015, ale nie w programie 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
}
Aby rozwiązać ten problem, zadeklaruj array::size()
funkcję jako constexpr
lub usuń constexpr
kwalifikator z f
.