这段代码在 g++ ( coliru ) 中编译得很好,但在 MSVC ( godbolt和我的 VS2017) 中编译得不好。
#include <type_traits>
#include <iostream>
template<class T> void f(){
constexpr bool b=std::is_same_v<T,int>; //#1
auto func_x=[&](){
if constexpr(b){ //#error
}else{
}
};
func_x();
}
int main(){
f<int>();
}
(6): 错误 C2131: 表达式未计算为常数
(6): 注意: 失败是由在其生命周期之外读取变量引起的
(6): 注意: 请参阅“this”的用法
哪一个(g++ 或 MSVC)错了?“查看‘this’的用法”中有
什么内容??this
如何在保持编译时保证的同时解决它?
在我的真实情况下,b (#1)
一个复杂的语句取决于其他几个 constexpr 变量。