【发布时间】:2021-01-28 07:27:22
【问题描述】:
在 C++20 中,以下函数是否格式错误:
void f(auto&&... args) { /*...*/ }
如果不是格式错误,有没有办法以与以下函数完全相同的方式在正文中转发参数(不修改签名):
template<typename... Args>
void f(Args&&... args) {
g(std::forward<Args>(args)...);
}
如果是这样,应该用什么代替Args 作为std::forward 的模板参数?
【问题讨论】:
-
我觉得这里已经回答了stackoverflow.com/questions/24535430/…
-
@StoryTeller-UnslanderMonica 我认为这种可变性使其完全不同。正确的语法可以说是不明显的。
-
@cigien - 这是细枝末节......而且可能会抓住稻草。与单个参数相比,包引起的语法差异是几个额外的省略号。
-
是的,无论哪种方式我都可以,因为它是重复的。我怀疑
decltype是正确的答案,但我不清楚它是否正确处理了所有引用折叠/转发引用的内容。 -
@StoryTeller-UnslanderMonica 当然,但语法上的差异并不是很多未来访问者会关心的。并且拼写可以合理地为
<decltype(args...)>。编译器只说“在这里解析错误”。我对那个 pov 的骗局持怀疑态度。