编译器错误 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
限定符。