gcc中无法解析的重载函数类型

Petok Lorand

我正在尝试将函数模板作为参数传递给另一个函数,如下面的示例所示。

#include <iostream>

template <typename T>
decltype(auto) foo(T t)
{
    return t;
}

template <typename Fn, typename T>
decltype(auto) bar(Fn fn, T t)
{
    return fn(t);
}

int main()
{
    int arg = 0;

    std::cout << bar(foo<decltype(arg)>, arg) << std::endl;

    return 0;
}

虽然这在clang 9.0和msvc v19.24中有效,但在gcc 9.2中失败

gcc输出:

no matching function for call to 'bar(<unresolved overloaded function type>, int&)' std::cout << bar(foo<decltype(arg)>, arg) << std::endl;

这是gcc中的错误吗?我还能以某种方式在gcc中规避吗?

Godbolt链接:https://godbolt.org/z/oCChAT

songyuanyao

是的,这应该是gcc的错误,即使在gcc 10.0.1中也没有修复

使用诸如auto和的占位符类型说明符指定返回类型时,gcc似乎无法处理这种情况decltype(auto)如果您指定返回类型,T将可以正常工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

pybind11:卡在无法解析的重载函数类型中

无法解析的重载函数类型,克隆for_each

对QImage :: fill使用QtConcurrent时无法解析的重载函数类型

来自类型<无法解析的重载函数类型>的无效static_cast

尝试将函数作为参数传递时,无法解析的重载函数类型

没有匹配的函数无法调用未解析的重载函数类型

无法通过函数类型的并集重载函数

错误:无法解析对重载函数的引用

函数不参与继承中的重载解析

泛型构造函数中的重载解析

如何从重载解析中删除重载函数?

无法解析数据/新类型声明中的数据构造函数

打字稿中的重载函数类型

根据参数中向量的类型重载函数

在Powershell构造函数中按类型重载?

非类型模板参数中的占位符类型可以涉及作为模板参数传递的函数的重载解析吗?

错误:没有匹配的函数调用'sf::RenderWindow::draw(<未解析的重载函数类型>)'| C++ 中的 SFML

C ++中的函数重载无法正常工作

继承函数的重载解析

使用{}的函数重载解析

由于无法解析重载函数,导致C ++绑定失败

错误:仅在返回类型上不同的函数无法重载

如何从重载解析中删除一个函数?

对R中函数的重载解析感到困惑吗?

错误:从“ <未解析的重载函数类型>”转换为非标量类型

类中的重载!=函数允许使用哪些参数类型

尝试根据模板类型重载模板类中的虚函数

打字稿中的函数重载和类型推断

用Java中的泛型类型重载构造函数