【发布时间】:2019-08-03 19:21:59
【问题描述】:
此代码在 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 变量。
【问题讨论】:
-
Coliru 使用 GCC 8.2; gcc.godbolt.org 的 GCC 8.3 也拒绝该代码。 Clang 7.0.0 编译它。
标签: c++ lambda language-lawyer c++17 if-constexpr