错误假设在GCC上从过载函数中键入XXX

error assuming cast to type xxx from overloaded function on gcc

本文关键字:函数 XXX 假设 GCC 错误      更新时间:2023-10-16

我在clang

上没有发生的GCC上遇到了一个错误
template<typename T>
int invoke_func(T a) {
    return a;
}
bool test(int(*ptr)(int))
{
    return ptr == invoke_func<int>;
}

Godbolt

错误:

<source>: In function 'bool test(int (*)(int))':
<source>:9:19: error: assuming cast to type 'int (*)(int)' from overloaded function [-fpermissive]
     return ptr == invoke_func<int>;
                   ^~~~~~~~~~~~~~~~

GCC拒绝此代码是正确的吗?

在进一步测试替换invoke_func<int>之后,&invoke_func<int>在GCC和Clang上工作。

但是,当不在 int(*ptr)(int) = invoke_func<int>;之类的表达式中时,为什么需要&

Godbolt

不涉及过载分辨率,因此消息至少是GCC错误。似乎有一个错误报告:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81059

编辑:在搜索标准规则时,我偶然发现了重复的现有答案,这解释了角案例:为什么如果没有显式&amp&amp;在功能名称上?