为何C++函数返回类型中不允许进行模板实参推导?
为什么类模板实参推导不能用于函数返回类型?
最直接的回答或许是——因为标准如此规定。这无可厚非,但我仍想深入探究这一规定背后的原因。
先看这段编译失败的代码:
template<typename T> struct S { S(T) {} }; S f() { return 0; } int main() { auto s = f(); (void)s; }
它的报错信息是:
error: use of class template 'S' requires template arguments; argument deduction not allowed in function return type
修复起来其实很简单,改成下面这样就能正常编译了:
auto f() { return S{0}; }
不过我一直好奇,允许类模板实参推导应用于函数返回类型会有哪些弊端?乍看这只是个没道理的限制,但我肯定漏掉了关键的考量点。
内容的提问来源于stack exchange,提问作者skypjack
相关产品推荐
相关产品推荐

