【问题标题】:Deducing explicitly specialized function template type推导显式特化的函数模板类型
【发布时间】: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)
}

【问题讨论】:

标签: c++ gcc c++14 language-lawyer type-deduction


【解决方案1】:

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

【讨论】:

  • @IgorR.,是的,这真的令人沮丧。我想,既然有一个解决方法,它在他们的优先级列表中并不高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
相关资源
最近更新 更多