此代码在 gcc 中编译良好,但在 Visual C++ 中编译失败。
MCVE = https://wandbox.org/permlink/SqNI85EospSrwm5T
int main() {
auto func_do1Pass2=[&]() {
return 8;
};
constexpr int g=func_do1Pass2();
auto sLambda=[&]() {
constexpr int g2=func_do1Pass2(); //<== error at Visual C++
};
}
错误 C2131 表达式未计算为常量
谁错了? 为什么? 请给个参考。
这是我更真实的例子。 在 Visual C++ 情况下以下代码的解决方法是什么?
代码:
void testtt() {
int localVariable=0; //some local variable
auto func_do1Pass2=[&]<int s>() {
if constexpr(s==5){localVariable=7;}
///^ may modify some local variables
return 8;
};
[&]<int s2>() {
///vvv can edit only here
constexpr int g2=func_do1Pass2.operator()<s2>();
///^^^ can edit only here
}.operator()<2>();
}
只需制作
func_do1Pass2
constexpr ,如下所示。
void testtt() {
//--vvvvvvvvv-------------------------------->added constexpr here
constexpr auto func_do1Pass2=[&]<int s>() {
return 8;
};
[&]<int s2>() {
constexpr int g2=func_do1Pass2.operator()<s2>();
}.operator()<2>();
}