使用函数模板推导返回类型
deduced return type with function template
请考虑以下程序:
#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
所以程序是很好的。
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 无法推断返回类型的模板参数
- 具有替代返回类型的模板专用化
- clang 拒绝具有尾随 decltype 返回类型的模板调用是否正确,具体取决于其重载之一?
- 自动检索返回类型的模板功能
- 模板返回类型函数如何在C++中工作
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- C++ 基于模板参数返回类型的模板函数
- 如何将函数指针声明指向模板函数,其返回类型取决于模板类
- 如何获取函数返回类型的模板成员的取消引用类型
- 从带有lambda的std::函数返回类型的模板参数类型推导
- 使用具有不同输入参数和不同返回类型的模板的泛型函数
- 变量模板函数,其中返回类型取决于模板参数列表
- 如何有条件地编译返回类型的模板化函数
- C++多态性+用于选择返回类型的模板成员函数.如何做到这一点
- 函数模板中返回类型的模板实参演绎
- 函数c++中具有大小返回类型的模板
- 具有未定义成员函数返回类型的模板实例化