C语言中的constexpr结构体与整型常量表达式
在阅读N3220草案标准中关于“6.6常量表达式”时,显然可以看出:
constexpr struct {
int i;
} S = {.i = 100};
S.i是一个整数常量表达式。
但为什么在编译需要整数常量表达式的代码时,Clang会发出这个检查呢?
int main(void) {
int i = get_i();
switch(i) {
case S.i: break; // warning: expression is not an integer constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]
}
}
解决方案
这是Clang的一个问题(https://github.com/llvm/llvm-project/issues/178349),已在Clang 23版本中修复。通过源码编译得到的Clang的最新版不再产生这个错误。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。