使用函数模板推导返回类型

deduced return type with function template

本文关键字:返回类型 函数模板      更新时间:2023-10-16

请考虑以下程序:

#include<functional>
template<typename T>
T f() { return T{}; }
template<typename T>
auto g() { return T{}; }
int main() { 
std::function<int()> a = f<int>;  // ok, clang and gcc
std::function<int()> b = g<int>;  // ok, clang, error gcc
}

gcc 中的错误是

error: conversion from '<unresolved overloaded function type>' to non-scalar type 'std::function<int()>' requested

下面是要试验的代码。

我不明白为什么程序仅在返回类型为T时才编译,而在推导返回类型时在 gcc 上失败。

编辑:评论表明这是一个gcc错误,但我可以确认该程序确实格式良好吗?

事实上,f()g()是类似的函数,具有相同的结果类型。

这只是GCC中的一个错误,在GCC 10.3中已修复。Clang和MSVC也接受该程序,演示:https://gcc.godbolt.org/z/qPvar6vTh

所以程序是很好的。