推导明确的专用功能模板类型

Igo*_* R. 3 c++ gcc language-lawyer type-deduction c++14

以下代码中, GCC未能编译(1)(无法推断F),但成功编译(2)。这里的关键是bar模板的推导返回类型,否则GCC不会失败。

但是,Clang会编译整个代码而不会出错。

在这种情况下,(1)和(2)之间除了作为b函数指针之外,还有什么本质区别?这是GCC中的错误,还是这里有些格式错误?

template<class>
auto bar() {
    return 0;
}

template<class F>
void foo(F&&) {
}

int main () {
    foo(bar<int>); // (1)

    auto b = bar<int>;
    foo(b);  // (2)
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*eyA 5

是的,这是一个已经存在一段时间的GCC错误:https : //gcc.gnu.org/bugzilla/show_bug.cgi?format=multiple&id=64194