Clang调用返回void的immediate函数出现链接错误是否属于Bug?
该问题确实是Clang本身的实现Bug
C++标准明确规定:consteval修饰的立即函数,所有合法调用都必须在编译期完成常量求值,不会生成运行时的函数实体,也不会产生可链接的符号。
错误触发的根本原因
Clang对返回void的立即函数处理逻辑存在缺陷:
- 当在非立即函数的上下文(比如示例中的普通
main函数)直接调用返回void的consteval函数时,Clang没有正确执行编译期常量求值流程,反而错误生成了指向该函数的外部符号引用 - 由于
consteval函数本身不会生成运行时可链接的实体,链接阶段找不到对应符号,就会抛出undefined reference错误
非void返回类型无异常的原因
当consteval函数返回非void类型时,哪怕调用方主动丢弃返回值,Clang也会正常触发编译期求值流程,不会生成运行时的函数调用和符号引用,因此不会出现链接错误。
内容的提问来源于stack exchange,提问作者Fedor
相关产品推荐
相关产品推荐

