【发布时间】:2019-11-30 21:19:27
【问题描述】:
在the following code GCC 编译失败(1)(无法推导出F),但编译成功(2)。这里的重点是bar模板推导出的返回类型,否则GCC不会失败。
但是,Clang 编译整个代码没有错误。
除了b 是指向函数的指针之外,在这种情况下,(1) 和 (2) 之间的本质区别是什么?这是 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)
}
【问题讨论】:
-
对我来说看起来像一个 GCC 错误。 ICC 和 MSVS 也都可以编译。
-
是的,这是一个 gcc 错误:gcc.gnu.org/bugzilla/show_bug.cgi?format=multiple&id=64194
标签: c++ gcc c++14 language-lawyer type-deduction