为何LLVM libc++的std::format会因含":}"的格式字符串报错?
关于std::format编译错误的问题解答
使用clang++ -std=c++23 -stdlib=libc++编译给定代码时,会触发“尝试在非常量表达式上计算consteval函数”的错误,这是libc++标准库的实现bug,和双字符/三字符功能、高级格式化特性无关。
具体来说,格式字符串"{0:}>"中,{0:}是合法的占位符(格式规范部分为空),后续的>应被当作普通文本处理。但libc++的std::format解析器错误地将}>视为格式规范的一部分,触发了需要编译期求值的consteval函数__parse_alignment——而argc是运行时才能确定的变量,相关的字符串迭代器指向栈上的自动存储对象,无法作为常量表达式传递,因此触发编译错误。
内容的提问来源于stack exchange,提问作者user3188445
相关产品推荐
相关产品推荐

