cig*_*ien 6 c++ language-lawyer
考虑以下程序:
#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
}
Run Code Online (Sandbox Code Playgroud)
gcc 中的错误是
error: conversion from '<unresolved overloaded function type>' to non-scalar type 'std::function<int()>' requested
Run Code Online (Sandbox Code Playgroud)
这是要试验的代码。
我不明白为什么程序仅在返回类型为 时才编译T,并且在推导返回类型时在 gcc 上失败。
编辑:评论表明这是一个 gcc 错误,但我可以确认该程序确实格式良好吗?
事实上,f()和g()是类似的函数,具有相同的结果类型。
这只是 GCC 中的一个错误,已在 GCC 10.3 中修复。Clang和MSVC也接受该程序,演示: https: //gcc.godbolt.org/z/qPvar6vTh
所以该程序的结构良好。