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