[英]Why no function template matches function template specialization with different return type in that example?
為什么在嘗試為顯式模板特化設置不同的返回值而不是 auto 時會發生編譯錯誤? 為什么這里編譯報錯:
template <size_t T>
auto Get() = delete;
template <>
auto Get<0>(){
return 5;
}
std::string str = "Hello world!";
template <>
std::string const & Get<1>() {
return str;
}
int main() {
func_employee();
return 0;
}
在您的示例中, auto Get()
是與模板參數無關的函數簽名。 如果您希望能夠顯式特化返回類型,則必須為其添加相應的參數:
template <size_t S, typename R>
R Get() = delete;
在這種情況下,模板特化可以保持不變,但auto
返回類型不再有意義,因為我看不到它如何用於實例化模板,因此您可能希望將其替換為所需的整數類型:
template <>
int Get<0>(){
return 5;
}
最后,function 模板不會根據返回類型推導其 arguments,因此在這種情況下您必須明確指定它:
auto integral = Get<0, int>();
auto string = Get<1, std::string const &>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.