Compiler Error C3615

constexpr function 'function' cannot result in a constant expression

The function function could not be evaluated as constexpr at compile time. To be constexpr, a function can only call other constexpr functions.


Visual Studio 2017 correctly raises an error when the left-hand operand of a conditionally evaluating operation is not valid in a constexpr context. The following code compiles in Visual Studio 2015 but not 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

To fix this issue, either declare the array::size() function as constexpr or remove the constexpr qualifier from f.