编译器错误 C3615

constexpr 函数“function”不能生成常数表达式

函数 function 无法在编译时计算为 constexpr。 若要为 constexpr,函数只能调用其他 constexpr 函数。

示例

当条件性计算运算的左侧操作数在 constexpr 上下文中无效时,Visual Studio 2017 会正确引发错误。 下列代码在 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,或从 f 中删除 constexpr 限定符。