【发布时间】:2017-07-12 22:06:00
【问题描述】:
从我的角度来看,我发现了非常奇怪的行为:函数默认参数无法在下面的代码中转发。
void Test(int test = int{}) {}
template<typename F, typename ...Args>
void Foo(F&& f, Args&&... args)
{
std::forward<F>(f)(std::forward<Args>(args)...);
}
int main()
{
Foo(Test, 0); // This compiles
Foo(Test); // This doesn't compile
}
Clang 报告: 错误:函数调用的参数太少,预期为 1,有 0 GCC 和 VC 报告相同的错误。
谁能解释一下?
【问题讨论】:
-
较短的测试用例:
auto f = Test; f();
标签: c++ c++11 perfect-forwarding