簡體   English   中英

使用 function 模板推導出的返回類型

[英]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

所以程序是很好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM