繁体   English   中英

gcc中未解决的重载函数类型

[英]Unresolved overloaded function type in gcc

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

#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

对于 gcc,另一种解决方法可以是:

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

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

当使用autodecltype(auto)占位符类型说明符指定返回类型时,gcc 似乎无法处理这种情况。 如果您将返回类型指定为T ,它将正常工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM